本人因对字符串数组定义的遗忘,便编了几行代码,果不其然就出现问题,接下来,上图: |
|
多余的元素被编译器自动填充为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分 |
strlen()只有在遇到 “”\0″” 才结束,所以strlen(a)完全是未知的, 而你定义了数组的大小,它会默认填充0 “123456789”,这个作为一个字符串也会在末尾加上 “”\0″” |
首先,谢谢各位的解答,
其次我还有个问题,就是现在我知道了%s是是输出遇到‘\0″”,但是为什么它是逆着到上一个字符串变量的’\0″”才输出,而不是下一个。 PS:我知道我定义的num3不是个字符串变量 |
|
好厉害的感觉~
|