0
点赞
收藏
分享

微信扫一扫

错误笔记(持续更新中...)

生态人 2022-04-13 阅读 115
c语言

1.sizeof()和strlen()的区别:
sizeof():以字节为单位返回其整个长度的大小(总),在编译阶段便开始起作用适用于绝大多数类型;

strlen():测试字符型数组的长度,其他类型不可以,遇见 ‘\0’ 终止(实际),即求已存在的长度;

/*===============================================
*   文件名称:1.c
*   创 建 者:     
*   创建日期:2022年04月08日
*   描    述:
================================================*/
#include <stdio.h>

int main(int argc, char *argv[])
{
    char s1[10] = "abcd!";
    char *s2 = "\n123\\";
    // 指针  占八个字节 
    char *s3 = "\n";
    // 指针  
    char s4[10] = "\n123\\"; 
    // \n 一个字符,转行
    // \\ 一个字符,反斜杠+转义字符 

    printf("strlen(s1)=%d,sizeof(s2)%d\n",strlen(s1),sizeof(s2));
    printf("sizeof(s1)=%d\n",sizeof(s1));   //若,初始化不对,及其容易造成野指针
    printf("sizeof(s3)=%d\n",sizeof(s3));
    printf("strlen(s4)=%d\n",strlen(s4));

    return 0;
} 

 野指针:指针未初始化或全部初始化。

root@ubuntu:/C# ./a.out
strlen(s1)=5,sizeof(s2)8
sizeof(s1)=10
sizeof(s3)=8
strlen(s4)=5

2.存储溢出

char p = 255;        //有符号字符存储长度 -128~127

注意:不要错认为是先将等号右边算完(包含自增自减),再赋值给左边。实际上也是将等号右边算完,在赋值给等号左边,但是自增自减例外

自增自减:先拿来使用,再加1或者减1

这里也要考虑优先级,具体需要读者自己体会!!!

/*===============================================
*   文件名称:111.c
*   创 建 者:     
*   创建日期:2022年04月08日
*   描    述:
================================================*/
#include <stdio.h>

int main(int argc, char *argv[])
{
    int a=1,b=0;
    char c,d;
    c = 255;
    // 字符占一个字节,即八个二进制位(加一个符号位)
    // c溢出,但是既然存储了,只能将符号位拿来使用
    // 但是机器不一样,既然符号位是1,就认为该数是负数,自动取反加一
    b = a++;
    printf("c:%d\n",c++);
    //因此这里输出 -1
    d = c++ + 1;

    printf("d:%d\n",d);
    printf("b:%d\n",b);
    return 0;
} 
root@ubuntu:/C# ./a.out
c:-1
d:1
b:1

3.

举报

相关推荐

0 条评论