我编写了一个 C 程序如下,并使用 GCC 4.6.3 版本对其进行了编译。
#include <stdio.h>
int main(void)
{
char array1[7] = "network"; // no space for \0 in array here
char array2[5] = "network"; // even here, no space for \0 in array
printf("1. %s\n",array1);
printf("2. %s\n",array2);
return 0;
}
编译时:-
warning: initializer-string for array of chars is too long [enabled by default]
程序的输出是:-
1. network
2. netwo
在 array2 的输出中:- netwo+不可打印的字符。具有十六进制值 7F 的不可打印字符。
我的问题是:-
- 打印array1的值时,为什么打印“network”后不打印垃圾值,就像打印array2一样。
这个疑问得到了 array1 和 array2 中没有 NULL 终止符这一事实的支持,那么为什么只有在 array2 的输出之后才产生垃圾值呢?
那么,GCC 会检查数组边界吗?