#include <iostream>
using namespace std;
struct student {
char name[20];
int age;
};
int main() {
student name1;
name1.name = "youhognjie"; // 編譯錯誤:無法將字符串字面量賦給字符數組
cout << name1.name << endl;
return 0;
}
在 C/C++ 中,字符數組(如 char name[20])定義後,數組名代表首地址,是常量指針,不能直接作為左值進行賦值操作。name1.name = "youhognjie" 試圖修改數組首地址,這在語法上是非法的。
需包含 <cstring> 或 <string.h> 頭文件:
#include <cstring> // 或 #include <string.h>
strcpy(name1.name, "youhognjie"); // 安全做法:strcpy_s 或 strncpy
注意:確保目標數組足夠大,防止緩衝區溢出。現代 C++ 建議使用 strncpy 或 C11 的 strcpy_s。
將結構體成員改為 std::string,直接支持賦值操作:
#include <string>
struct student {
string name; // 自動管理內存,支持 = 賦值
int age;
};
// 使用時
student name1;
name1.name = "youhognjie"; // 完全合法
strncpy(name1.name, "youhognjie", sizeof(name1.name) - 1) 並手動添加結束符 name1.name[sizeof(name1.name)-1] = '\0'。-Wall 或 /W4),可提前發現此類問題。