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

C++ const 字符串數組初始化錯誤 C2078 解決方案

     編輯:程式設計疑難解答

錯誤代碼

const char Snames[] = {"Spring", "Summer", "Fall", "Winter"}; // error C2078: too many initializers

原因

const char Snames[] 被推導為一維字符數組(單一字符串),初始化列表提供了 4 個字符串字面量,導致「初始化器過多」。

正確寫法

方法一:二維字符數組(固定最大長度)

const char Snames[][7] = {"Spring", "Summer", "Fall", "Winter"};
// 第二維長度需 ≥ 最長字符串長度+1(含結束符 '\0'),"Summer" 6 字符,故 7 足夠

方法二:指針數組(推薦,靈活)

const char *Snames[] = {"Spring", "Summer", "Fall", "Winter"};
// 每個元素是指向字符串常量區的指針,長度自適應

方法三:C++11 std::array / std::vector

#include <array>
#include <string>

const std::array<std::string, 4> Snames = {"Spring", "Summer", "Fall", "Winter"};
// 或
const std::vector<std::string> Snames = {"Spring", "Summer", "Fall", "Winter"};

使用建議

  • 需修改字符串內容 → 二維數組 char Snames[][7](去掉 const)。
  • 僅讀取、遍歷、傳遞 → const char *Snames[] 或 std::array<std::string>。
  • 現代 C++ 優先使用標準庫容器,避免手動管理記憶體與長度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved