我正在阅读 Robert C Seaford 的 C 和 C++ 书中的安全编码。
int main(int argv, char* argv[]) {
char a[16];
char b[16];
char c[32];
strcpy(a, "0123456789abcdef");
strcpy(b, "0123456789abcdef");
strcpy(c, a);
strcat(c, b);
printf("a = %s\n", a);
retrun 0;
}
三个字符数组的静态声明未能为空终止字符分配存储空间。
结果,第strcpy()
一个在数组末尾写入了一个空字符。
根据编译器分配存储的方式,此空字节可能会被strcpy()
下一行覆盖。如果发生这种情况,a
现在指向一个 20 个字符的数组,而b
指向一个 10 个字符的数组。
我的问题是作者平均数组如何a
包含 20 个字符和数组b
指向 10 个字符?