C++井字棋开发:二维char数组初始化报错求助
解决C++井字棋数组初始化报错问题
你遇到的初始化报错,根源是char类型和字符串字面量的不匹配:
char matrix[3][3]定义的是3×3的单个字符数组,每个元素仅能存储1个char类型字符。- 但你用的
"1"是字符串字面量,本质是const char*类型,且每个字符串实际包含两个字符:显式的'1'和隐式的结束符'\0'。编译器会尝试把每个字符串的所有字符当作初始化值,9个字符串会生成18个初始化数据,远超数组能容纳的9个char,因此触发"初始化值过多"的错误。
两种可行的修正方案
方案一:用单个字符初始化(推荐,贴合井字棋需求)
将双引号包裹的字符串字面量改成单引号包裹的单个字符,直接初始化char数组:
// 写法1:按二维结构初始化,更直观 char matrix[3][3] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'} }; // 写法2:扁平化初始化,C++会自动按顺序填充二维数组 char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
方案二:用字符串指针数组(若需存储字符串)
如果一定要用字符串字面量初始化,需将数组定义为字符串指针数组,且必须添加const(因为字符串字面量是不可修改的常量):
const char* matrix[3][3] = { {"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"} };
此时Draw函数无需修改,直接输出matrix[i][j]即可正常打印每个字符串。
完整修正代码(方案一版本)
#include <iostream> using namespace std; char matrix[3][3] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'} }; void Draw() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { cout << matrix[i][j] << " "; } cout << endl; } } int main() { Draw(); return 0; }
内容的提问来源于stack exchange,提问作者Austang
相关产品推荐
相关产品推荐

