如果我写下以下代码:
If I write:
char arr[8] = "abc";
arr[4]
可能有什么规范吗?我用Clang做了一些测试,似乎数组中剩余的字符被设为null。此外,char arr[8] = "";
会将每个字节都归零。不确定这是否是编译器方便、标准行为、纯属巧合还是我的理解有误。
void a()
{
char arr[8] = "abc"; /* breakpoint here, line 3 */
strcpy(arr, "1234567");
}
int main()
{
a();
a();
return 0;
}
调试器记录:
断点1,在str.c的第3行执行函数a() 3 char arr[8] = "abc"; (gdb) s 当前语言为:auto,目前为 minimal 模式。 4 strcpy(arr, "1234567"); (gdb) p arr $1 = "abc\000\000\000\000" (gdb) c 继续执行。
断点1,在str.c的第3行执行函数a() 3 char arr[8] = "abc"; (gdb) p arr $2 = "1234567" (gdb) s 4 strcpy(arr, "1234567"); (gdb) p arr $3 = "abc\000\000\000\000"