如果我写:初始化字符数组与规模较小的字符串文字
char arr[8] = "abc";
有没有在什么arr[4]
可能是任何规范?我用 Clang做了一些测试,似乎数组中剩余的字符都设置为空。 另外,char arr[8] = "";
每个字节为零。不知道这是否是编译器方便,标准的行为,纯粹的巧合还是我弄错了。
void a()
{
char arr[8] = "abc"; /* breakpoint here, line 3 */
strcpy(arr, "1234567");
}
int main()
{
a();
a();
return 0;
}
调试成绩单:
Breakpoint 1, a() at str.c:3 3 char arr[8] = "abc"; (gdb) s Current language: auto; currently minimal 4 strcpy(arr, "1234567"); (gdb) p arr $1 = "abc\000\000\000\000" (gdb) c Continuing. Breakpoint 1, a() at str.c:3 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"
@Lundin - 实际上,编曲[3]设置为空终止,所以他有权要求有关ARR [4] –
@JamesCaccese似乎是一个错字...无论如何,这一切都在我发布的答案中解释。 – Lundin
@Lundin - 谁是错字,你的或者是sidyll的?您的评论arr [4]之上的设置为空终止,因为“”为false。 arr [3]被设置为空终止,因为“”,arr [4]被设置为零,因为它没有被明确初始化。你的回答是正确的,但你的评论是关闭的,它会混淆这个问题。既然你不能编辑评论,你应该删除它。 –