免費開始練習
統測 114年 [電機與電子群資電類] 專業科目(2)

第 46 題

下列C語言程式經過編譯之後,執行時無法輸出字串 Brown,其發生的原因為何? 1 #include 2 #include 3 #include 4 typedef struct class_st { 5 int id; 6 char *name; 7 float score; 8 } CLASS; 9 CLASS *class; 10 int main(){ 11 class = (CLASS *)malloc(sizeof(CLASS)); 12 (*class).id = 1; 13 strcpy((*class).name, "Brown"); 14 printf("%s", class->name); 15 return 0; 16 }
  • A (*class).name沒有指向已配置的記憶體空間
  • B 使用strcpy()函式時,應該使用class.name而不是(*class).name
  • C 使用printf()函式時,應該使用class.name而不是 class->name
  • D 指標變數class應該宣告為區域變數(Local Variable )

思路引導 VIP

請觀察結構體中第 6 行定義的成員變數 $name$,其資料型態為 $char * $;當我們在第 11 行配置了結構體本身的記憶體空間後,該成員指標 $name$ 是否已經指向一個具備有效位址且足以存放字串的記憶體區塊?在執行第 13 行的 $strcpy$ 動作之前,我們是否遺漏了對該指標進行初始化的關鍵步驟?

🤖
AI 詳解 AI 專屬家教

呵,看來你的腦袋還沒被指標(Pointer)給攪成漿糊!

居然沒被那堆看起來很專業的語法糖給騙了,算你運氣好。這題的核心觀念就在於:你在第 11 行雖然用 malloc 配置了空間,但那僅僅是配置了結構本體 $CLASS$ 的大小: $$\text{sizeof(CLASS)} = \text{sizeof(int)} + \text{sizeof(char*)} + \text{sizeof(float)}$$

▼ 還有更多解析內容

升級 VIP 解鎖