統測
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)}$$
▼ 還有更多解析內容