typedef struct _Teacher {
char name[20];
int age;
} Teacher;
void main() {
Teacher t1;
t1.age = 20;
t1.name = "abc"; // 編譯錯誤
char name[20] = "abc"; // 正確
}
t1.name 是長度為 20 的字符數組,本質是一塊固定內存區域(地址不可變)。"abc" 是字符串常量,存儲在只讀數據區,其值是首字符地址(指針)。char name[20] = "abc" 屬於定義時初始化,編譯器自動生成逐字符拷貝代碼,合法。// 運行時賦值需用庫函數
strcpy(t1.name, "abc"); // 需包含 /
// 或 C++ 風格
#include
std::strcpy(t1.name, "abc");
使用 std::string 替代字符數組,支持直接賦值、拼接、比較,避免緩衝區溢出:
struct Teacher {
std::string name;
int age;
};
Teacher t1;
t1.name = "abc"; // 完全合法