Code Bye

定义字符串数组时,缺少'

 

本人因对字符串数组定义的遗忘,便编了几行代码,果不其然就出现问题,接下来,上图:



为什么定义字符串数组num2时,没有数组下标,也没有在{}加上””\0″”时,会出现这种情况?
但在定义了数组下标(大于数组内元素个数)时,仍未加上””\0″”时就是一个正常输出了?

多余的元素被编译器自动填充为0,所以可以自动结束
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
char a[] = {“”a””,””b””};
 char b[] = {“”b””,””c””};
 char c[] = {“”a””,””b””};
 printf(“%d,%d,%d\n”,strlen(a),strlen(b),strlen(c));
三个结果不一样,而且都不是2
20分
引用 3 楼 u011737099 的回复:

char a[] = {“”a””,””b””};
 char b[] = {“”b””,””c””};
 char c[] = {“”a””,””b””};
 printf(“%d,%d,%d\n”,strlen(a),strlen(b),strlen(c));
三个结果不一样,而且都不是2

strlen()只有在遇到  “”\0″”  才结束,所以strlen(a)完全是未知的,

而你定义了数组的大小,它会默认填充0

“123456789”,这个作为一个字符串也会在末尾加上 “”\0″”

首先,谢谢各位的解答,
其次我还有个问题,就是现在我知道了%s是是输出遇到‘\0″”,但是为什么它是逆着到上一个字符串变量的’\0″”才输出,而不是下一个。
PS:我知道我定义的num3不是个字符串变量
好厉害的感觉~

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明定义字符串数组时,缺少'