如果我寫:初始化字符數組與規模較小的字符串文字
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]被設置爲零,因爲它沒有被明確初始化。你的回答是正確的,但你的評論是關閉的,它會混淆這個問題。既然你不能編輯評論,你應該刪除它。 –