龙的传人98 发表于 2021-3-3 20:42:51

字符数组中,赋值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));       

王逗比666 发表于 2021-3-3 21:15:46

c=0说明这里储存的值是整数0,'\0'是字符串的结束标志,在数组中是判定数组结束的标志

wp231957 发表于 2021-3-3 21:20:12

它俩不一样,但是数值上一样

kogawananari 发表于 2021-3-3 22:55:41

(int)0这个东西存到char类型的空间里面就是'\0'
同理(int)97这个东西存到char类型的空间里面就是'a'

也就是说 单引号这个东西虽然只有一个字节 但是就是被当成了int 所以sizeof字符字面量也会得到4

kishere 发表于 2021-3-4 14:30:14

我觉得用ASCII解释比较清楚吧, 在ASCII编码中, 字符 '0' 是48, 即这个变量在内存中的数值是48, 而c = 0, 计算机并不认为你是想将'0'这个字符串存放在c中, 而是认为你想让这个内存地址存放的数值为0(因为你没有加 ' 引号, 0在ASCII中代表的是'空'(NULL, 也就是'\0'), C语言在处理字符串的时候遇到一个char变量的内存地址存放的是0的时候, 它就会认为字符串结束了.

龙的传人98 发表于 2021-3-5 15:28:52

kogawananari 发表于 2021-3-3 22:55
(int)0这个东西存到char类型的空间里面就是'\0'
同理(int)97这个东西存到char类型的空间里面就是'a'



有道理,原来是被当成了int型,而不是一个字符

龙的传人98 发表于 2021-3-5 15:34:02

kishere 发表于 2021-3-4 14:30
我觉得用ASCII解释比较清楚吧, 在ASCII编码中, 字符 '0' 是48, 即这个变量在内存中的数值是48, 而c = 0, ...

感谢,懂了两点{:5_106:}
原来NULL就是'\0'
原来是没有加引号,所以没有把0当成字符,
页: [1]
查看完整版本: 字符数组中,赋值0和'\0'为什么会一样的效果,有什么关系和区别?