Q127.
下列C++語言程式片段中,那些可以正確執行?
電腦軟體設計(C++) · 乙級 · C++ · Q127
難易度分析
3 / 5
本題採用複選題型,要求精確區分字元陣列與指標在初始化及賦值上的語法限制,且包含容易產生誤判的陷阱選項,增加了整體判斷的複雜度。
正確答案 (複選):②, ③, ④
- ② char s2[]={'C', 't', 'e', 's', 't','
'};:字元陣列的逐字元初始化為合法語法,編譯器會根據大括號內的元素個數自動配置陣列大小。此寫法不含空字元 `\0` 結尾,但仍可正確編譯執行。 - ③ char s3[20]="Ctest";:宣告時以字串常數初始化字元陣列是標準且推薦的寫法。陣列大小 20 足以容納 "Ctest" 及其隱含的 `\0` 結束字元,剩餘空間自動填零。
- ④ char *s4="Ctest
":字元指標指向字串常數為合法語法,指標 `s4` 會儲存字串常數的記憶體位址。需注意現代 C++ 建議使用 `const char*` 以避免嘗試修改唯讀記憶體。
錯誤選項解析
- ① char s1[10]; s1="Ctest";:字元陣列宣告後不可直接指派字串常數。陣列名稱屬於不可修改的左值(non-modifiable lvalue),應使用 `strcpy()` 函式進行字串複製,或使用逐字元賦值方式。
Learning Tip
"此題核心考點為 C++ 字元陣列與字元指標的初始化差異。常考陷阱:① 陣列只能在宣告時直接用字串常數初始化,宣告後必須用 `strcpy()` 賦值;② 逐字元初始化若未包含 `\0`,該陣列不構成 C 風格字串,使用 `strlen()` 或 `cout <<` 可能產生未定義行為;③ `char*` 指向字串常數雖可編譯,但修改內容會導致 Segmentation Fault,應養成使用 `const char*` 的習慣。"
學員答題分佈
①char s1[10]; s1="Ctest";0%
②char s2[]={'C', 't', 'e', 's', 't','
'};0%
'};0%
③char s3[20]="Ctest";0%
④char *s4="Ctest
"0%
"0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!