字符数组中,赋值0和'\0'为什么会一样的效果,有什么关系和区别?
我利用stelen()函数获取长度,到c【3】就截止了,0和'\0'到底有什么关系?char c;
c='a';
c='b';
c='c';
c=0;
c='d';
c='e';
c='f';
printf("%d",strlen(c)); c=0说明这里储存的值是整数0,'\0'是字符串的结束标志,在数组中是判定数组结束的标志 它俩不一样,但是数值上一样 (int)0这个东西存到char类型的空间里面就是'\0'
同理(int)97这个东西存到char类型的空间里面就是'a'
也就是说 单引号这个东西虽然只有一个字节 但是就是被当成了int 所以sizeof字符字面量也会得到4
我觉得用ASCII解释比较清楚吧, 在ASCII编码中, 字符 '0' 是48, 即这个变量在内存中的数值是48, 而c = 0, 计算机并不认为你是想将'0'这个字符串存放在c中, 而是认为你想让这个内存地址存放的数值为0(因为你没有加 ' 引号, 0在ASCII中代表的是'空'(NULL, 也就是'\0'), C语言在处理字符串的时候遇到一个char变量的内存地址存放的是0的时候, 它就会认为字符串结束了. kogawananari 发表于 2021-3-3 22:55
(int)0这个东西存到char类型的空间里面就是'\0'
同理(int)97这个东西存到char类型的空间里面就是'a'
有道理,原来是被当成了int型,而不是一个字符 kishere 发表于 2021-3-4 14:30
我觉得用ASCII解释比较清楚吧, 在ASCII编码中, 字符 '0' 是48, 即这个变量在内存中的数值是48, 而c = 0, ...
感谢,懂了两点{:5_106:}
原来NULL就是'\0'
原来是没有加引号,所以没有把0当成字符,
页:
[1]