C语言字符数组与字符串问题

char c[10]={'H','E','L','L','O','!','\0'};这里不需要显示地给出字符串结束标志'\0',而char c[ ]={'H','E','L','L','O','!','\0'};则要显示地给出字符串结束符'\0',为什么?

这是在定义时初始化 如果你的右边花括号内的字符个数少于【数组元素个数】 那么其余的数组元素将会初始化为0 , ’\0'的ASCII码的值就是0 ;

如果你不指定数组元素个数 编译器会自动帮你计算出元素个数的追问

编译器会自动帮你计算出元素个数?那为什么要显示地给出字符串结束符'\0'?编译器自动帮你计算出元素个数是6还是7个?

追答

char c[ ]={'H','E','L','L','O','!','\0'}; 这个数组长度是7 (好吧刚给看到 你的还有个!号)

追问

那为什么第二个数组一定要输入一个'\0'?第一个可以输入或不输入呢?

追答

char b[]={ 'h','e','l','l',o'} 也可以这样用 但是你不能把他当做字符串来用 因为很多函数比如输出printf 等 是需要用\0来判断字符串是不是到了结尾了 假如你仅仅是把这个当做数组用的话就不需要加了 但是你要是吧他当做字符串就得加 \0

字符数组可以当做字符串来使用 只有当做字符串来使用的时候你才要在结尾加\0

char * a="hello" 这个是个字符串 ; char b[]={ 'h','e','l','l',o','\0'} 是个字符数组

你可以吧字符数组当做字符串来使用 两者是有很多区别的

比如a的hello 是在代码段的 是只读的
b的hello是在你的栈空间, 里面的元素师可以修改的

追问

是不是如果char b[]={ 'h','e','l','l',o'} 当做字符串使用和只当做数组来使用,显示的效果是一样的?

追答

显示效果当然是不一样的 如果你这种用法的话 你输出到o不会停止 而会读取o后面的字符 一直到读取到0为止 比如你的 函数栈中 h e l l o 后面有 a b c d 0 那么输出的就是 helloabcd

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-06
char c[10]={'H','E','L','L','O','!','\0'};这个是已经给定了数组的大小,达不到数组大小的长度的话会自动添零的追问

那么为什么char c[ ]={'H','E','L','L','O','!','\0'};则要显示地给出字符串结束符'\0'?

相关了解……

你可能感兴趣的内容

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