C语言 字符数组在定义时实际长度能不能等于有效长度 不给\0留空间

比如初始化chara[5]={a,b,c,d,e};而实际上系统要给字符数组加终止符\0来判断字符数组什么时候结束,也就是应该初始化为chara[6]={a,b,c,d,... 比如初始化 char a[5]={a,b,c,d,e}; 而实际上系统要给字符数组加终止符\0来判断字符数组什么时候结束,也就是应该初始化为 char a[6]={a,b,c,d,e};对不对?最后空一个位置给系统加\0
课本上说字符数组长度要大于实际长度,但在有些例题中课本自己将实际长度定义的跟有效长度相等。
展开
 我来答
沧海雄风2009
推荐于2018-03-04 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2828万
展开全部
不对
首先 初始化字符串 有 char a[5]={'a','b','c','d','e'}; 这种方式
还有 char a[5] ="abcd";这种方式 后者才会自动添加结束符
前者不会
至于char a[5]={'a','b','c','d','e'}; 这种对不对
这个是根据实际使用情况决定的
不是说没加结束符就一定不对
举个例子
例如 ip地址是4个unsigned char存储的
就可以申请 char ip[4] ={192,168,1,111};
这样并没有什么问题
而如果你是要存储一个字符串 然后用来输出的话
char a[5]={'a','b','c','d','e'}; 这样初始化的结果就是
printf("%s",a);
输出结果是 abcde#¥……&*后面一堆乱码
因为要输出到遇到结束符停止,至于第几个是结束符就看运气了
所以如果用于字符串的话 char a[5]={'a','b','c','d','e'}; 正确的应该是
char a[6]={'a','b','c','d','e','\0'};
中考试题库
推荐于2016-08-22 · TA获得超过381个赞
知道小有建树答主
回答量:310
采纳率:33%
帮助的人:149万
展开全部
一般不能,除非特殊用途,比如故意弄个溢出

C语言规定字符串必须以“\0”结尾,所以正常使用的话必须预留至少1个字节的空间存储这个0,否则在输出字符串的时候,会把字符串后面的东西一起输出,知道遇到0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cindyhq2011
2014-08-15 · TA获得超过165个赞
知道答主
回答量:132
采纳率:50%
帮助的人:68.6万
展开全部
简单粗暴点,你把字符数组跟字符串混淆了,这是两个概念。字符数组char a[5]={a,b,c,d,e};
这么初始化肯定没有问题的,字符数组是个变量。字符串是个常量,必须要以\0结尾,如果不以\0结尾,许多字符串函数用了就会报错,比如strlen等等。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
isc039
推荐于2017-11-26 · TA获得超过7.8万个赞
知道小有建树答主
回答量:744
采纳率:0%
帮助的人:439万
展开全部
这个是要看情况的,在某些情况下,字符数组末尾反而不允许有\0。
比如说,我要从文件中读取一行数据,并分成若干个项目后写入结构体。设文件每一行的内容如下。(项目中间无分隔符,括号里面是长度)

姓名(8)身份请号码(20)出生地(200)

读取时,可以直接写下面这一行代码
memcpy( 结构体指针,字符串指针, 结构体大小)

很明显,这时如果在结构体内的各个字符串数组中添加\0,会导致最后的拷贝结果不正确,所以这时就不能使用结束符。实际长度必须与有效长度相等。
追问
那对于一般情况 比如把几个字符输入到字符数组再输出 定义时实际长度等于有效长度行不行
追答
不行,由于没有结束字符,输出时系统无法准确定位字符串的结束,会继续输出后面的内存空间的信息。也就是所谓的“脏信息”。

总结一下吧,\0并不是必须的,你不加系统也不会认为你犯错了,一样会让你编译运行。
加不加\0的区别,加了\0,系统就知道你的字符串是在什么位置结束的,统计长度,输出什么的都会以你的\0为准。
不加的话,你需要自己控制每一次操作字符串时不能超过字符串的有效长度。否则就会出大问题。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友21519ff
2018-03-03
知道答主
回答量:10
采纳率:0%
帮助的人:2.1万
展开全部
可以,就你说的例子char a[5]应该有char a[0]char a[1]char a[2]char a[3]char a[4]char a[5],所以是留了位置的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式