在結構體中定義 char name; 並嘗試用 strcpy 複製字符串時,編譯器報錯或運行崩潰。
char name; 僅分配 **1 個字節**,只能存放單一字符(如 'A')。strcpy 要求目標地址指向足夠大的 **字符數組**,用於存放以 \0 結尾的字符串。// 定義結構體時使用字符數組
struct Student {
char name[20]; // 預留 20 字節,可存 19 字符 + '\0'
int age;
};
// 使用 strcpy 安全複製
struct Student s;
strcpy(s.name, "Zhang San"); // 正確
若字符串長度不固定,可結合 malloc 使用字符指針:
struct Student {
char *name; // 指針
int age;
};
struct Student s;
s.name = (char *)malloc(strlen("Zhang San") + 1);
strcpy(s.name, "Zhang San");
// 使用完畢後必須 free(s.name)
char name[N]。char *name,運行時動態分配。char name; 存字符串,也切勿對未分配內存的指針使用 strcpy。