C语言定义字符型数组时,两种初始化方式的区别?
chara[]={'a','b','c','d'};charb[]="abcd";我查资料说两个的区别时上面一个是长度为4,下面一个长度为5,因为下面那个还有一个表示结束...
char a[]={'a','b','c','d'};char b[]="abcd";我查资料说两个的区别时上面一个是长度为4,下面一个长度为5,因为下面那个还有一个表示结束的'\0',但是我用了两个不同的C语言编程工具得到的结果都不是这样,使用strlen求b的长度的时候竟然是8更离谱的是我要输出整个b的时候,它不但输出了整个b,还在后面跟上了整个a
展开
4个回答
展开全部
char a[]={'a','b','c','d'};
char b[]="abcd";
你查资料说两个的区别时,说上面一个是长度为4,下面一个长度为5,因为下面那个还有一个表示结束的'\0'。这是很正确的。
但是,你用两个不同的C语言编程工具得到的结果都不是这样。这应该是编程工具的区别。
使用strlen求b的长度的时候是8,另外要输出整个b的时候,它不但输出了整个b,还在后面跟上了整个a。这也是正常的。原因是:
b存储的4个字符并不是字符串,当你按照字符串长度函数strlen函数时,系统会在内存中从第一个字符开始查找结束符,一直找到为止,而这是不可预知的。
你得到的8是碰巧了。
还有,你打印b字符串,后面把a字符串也打印出来了,只是内存中碰巧的结果,它也是不可预知的。
比如,你把a去掉,只保留b,看一看就知道了。
char b[]="abcd";
你查资料说两个的区别时,说上面一个是长度为4,下面一个长度为5,因为下面那个还有一个表示结束的'\0'。这是很正确的。
但是,你用两个不同的C语言编程工具得到的结果都不是这样。这应该是编程工具的区别。
使用strlen求b的长度的时候是8,另外要输出整个b的时候,它不但输出了整个b,还在后面跟上了整个a。这也是正常的。原因是:
b存储的4个字符并不是字符串,当你按照字符串长度函数strlen函数时,系统会在内存中从第一个字符开始查找结束符,一直找到为止,而这是不可预知的。
你得到的8是碰巧了。
还有,你打印b字符串,后面把a字符串也打印出来了,只是内存中碰巧的结果,它也是不可预知的。
比如,你把a去掉,只保留b,看一看就知道了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你前半段说的长度是用sizeof算的,不是用strlen算的。如果是strlen算的,你必须确保字符串有\0结尾,所以你第一种初始化方式得到的数组是禁止用strlen的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strlen和printf中的%s都是以字符串结束符'\0'作为结束标志的
而逼的数组b定义时没有多复制一个字符串结束符,导致数组越界访问,直至遇到'\0'采集结束输出/判断字符串长度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询