鱼C论坛

 找回密码
 立即注册
查看: 3035|回复: 6

[已解决]字符数组中,赋值0和'\0'为什么会一样的效果,有什么关系和区别?

[复制链接]
发表于 2021-3-3 20:42:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我利用stelen()函数获取长度,到c【3】就截止了,0和'\0'到底有什么关系?
        char c[7];
        c[0]='a';
        c[1]='b';
        c[2]='c';
        c[3]=0;
        c[4]='d';
        c[4]='e';
        c[4]='f';
        printf("%d",strlen(c));       
最佳答案
2021-3-3 22:55:41
(int)0这个东西存到char类型的空间里面就是'\0'
同理(int)97这个东西存到char类型的空间里面就是'a'

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-3 21:15:46 | 显示全部楼层
c[3]=0说明这里储存的值是整数0,'\0'是字符串的结束标志,在数组中是判定数组结束的标志
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-3 21:20:12 From FishC Mobile | 显示全部楼层
它俩不一样,但是数值上一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-3 22:55:41 | 显示全部楼层    本楼为最佳答案   
(int)0这个东西存到char类型的空间里面就是'\0'
同理(int)97这个东西存到char类型的空间里面就是'a'

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-3-4 14:30:14 | 显示全部楼层
我觉得用ASCII解释比较清楚吧, 在ASCII编码中, 字符 '0' 是48, 即这个变量在内存中的数值是48, 而c[3] = 0, 计算机并不认为你是想将'0'这个字符串存放在c[3]中, 而是认为你想让这个内存地址存放的数值为0(因为你没有加 ' 引号, 0在ASCII中代表的是'空'(NULL, 也就是'\0'), C语言在处理字符串的时候遇到一个char变量的内存地址存放的是0的时候, 它就会认为字符串结束了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-3-5 15:28:52 | 显示全部楼层
kogawananari 发表于 2021-3-3 22:55
(int)0这个东西存到char类型的空间里面就是'\0'
同理(int)97这个东西存到char类型的空间里面就是'a'

有道理,原来是被当成了int型,而不是一个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-5 15:34:02 | 显示全部楼层
kishere 发表于 2021-3-4 14:30
我觉得用ASCII解释比较清楚吧, 在ASCII编码中, 字符 '0' 是48, 即这个变量在内存中的数值是48, 而c[3] = 0, ...

感谢,懂了两点
原来NULL就是'\0'
原来是没有加引号,所以没有把0当成字符,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 02:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表