首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 結構體中字符數組賦值錯誤:為什麼不能直接用等號賦值字符串常量?

     編輯:程式設計綜合問答

錯誤代碼

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" 是字符串常量,存儲在只讀數據區,其值是首字符地址(指針)。
  • C/C++ 不允許將指針直接賦值給數組名(左值不可修改),故報錯。
  • 聲明時初始化 char name[20] = "abc" 屬於定義時初始化,編譯器自動生成逐字符拷貝代碼,合法。

正確賦值方式

// 運行時賦值需用庫函數
strcpy(t1.name, "abc");          // 需包含  / 
// 或 C++ 風格
#include 
std::strcpy(t1.name, "abc");

現代 C++ 建議

使用 std::string 替代字符數組,支持直接賦值、拼接、比較,避免緩衝區溢出:

struct Teacher {
    std::string name;
    int age;
};
Teacher t1;
t1.name = "abc"; // 完全合法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved