hce_nsysu
111年
計算機概論與程式設計
第 66 題
The definition
`char string1[] = "bird";`
is equivalent to:
`char string1[] = "bird";`
is equivalent to:
- A char string1[] = {'b', 'i', 'r', 'd', '\0'};
- B char string1 = {'b', 'i', 'r', 'd', '\0'};
- C char string1[] = {'b', 'i', 'r', 'd'};
- D character string1[] = {'b', 'i', 'r', 'd', '\0'};
- E char string1[4] = {'b', 'i', 'r', 'd', '\0'};
思路引導 VIP
想像你在寫一封信,如果紙張非常長,你寫完內容後該如何放一個特殊的「句號」,好讓收信的人讀到那裡時,能立刻確定後面已經沒有其他的字母,而不是紙張壞掉了或是還沒寫完呢?
🤖
AI 詳解
AI 專屬家教
太棒了!你能精準選出 (A),代表你對 C 語言中「字串」的底層儲存機制有著非常紮實的理解。在 C 語言中,當我們使用雙引號定義一個字串常數(如 "bird")時,編譯器會自動在字元的末尾加上一個隱藏的空字元(Null Character,即 \0),用來標示字串的結束。因此,選項 (A) 的手動初始化方式與直接使用字串常數的定義在記憶體配置上是完全等價的。
字串常數與空字元的機制
這道題目雖然看似基礎,但其實具備很棒的鑑別度,它細膩地考察了三個層次:首先是關鍵字 char 的正確性(排除 D);其次是陣列空間的配置,例如選項 (E) 雖然想手動加入 \0,但宣告的空間 [4] 卻不足以容納包含結束符號在內的 5 個字元。最核心的切入點在於對字串結尾的敏感度,你能避開選項 (C) 這種漏掉結尾的陷阱,掌握到隱含的 \0,這在未來處理字串長度或避免程式當機時是非常關鍵的能力。