c语言问题: 为什么char str[6]="string",就数组级越界了呢?不是说'\0'不占内存的吗?

用sizeof(str)
我发现下面两种定义得到的结果是不同的;
第一种:
char str[6];
str[0]='s'; str[1]='t'; str[2]='r';
str[3]='i'; str[4]='n'; str[5]='g';
得到的结果是6;
第二种:
char str[]="string";得到的结果是7;这个是为什么啊

第一个是字符数组。相当于char str[6]={ 's','t','r','i','n','g'}; 得到的结果是6

在C语言中没有专门的字符串变量, 通常用一个字符数组来存放一个字符串。 前面介绍
字符串常量时, 已说明字符串总是以'\0'作为串的结束符。 因此当把一个字符串存入一个数
组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,
就不必再用字符数组的长度来判断字符串的长度了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-11
第一个是字符数组 第二个是字符串 当第一个不赋值的时候 输出也是6 因为你数组就六个空间 但是第二个str已经是指针了,字符串指针,sizeof的判断条件是‘\0’,并且把‘\0’也算作个数了 说了这么多 给你最佳吧
第2个回答  2012-09-11
字符数组并不要求它的最后一个字符为‘\0’,甚至可以不包含'\0',是否需要加'\0',完全根据需要决定。
char c[5]={'C','h','i','n','a'};完全合法
如果有char c[10] ="China";则第六个元素为'\0',后4个元素也设定为空字符,
第二种,系统对字符串常量自动加一个'\0' ,在输出字符数组中的字符串时,遇‘\0’就停止输出
比如定义
char c[10] ={'C','h','\0','n','a'};
结果只输出Ch
第3个回答  2012-09-11
因为第二种在最后自动附上‘\0’结束
第4个回答  2012-09-11
“string”在内存中是 's' 't' 'r' 'i' 'n' 'g' '\0',七个字节。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网