You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中使用常量字符串初始化矩阵输出异常该如何解决?

代码问题原因
  • 核心类型不匹配:你声明的Board[3][3]是char*(字符指针)类型的二维数组,存储的是字符串的内存地址,而非单个char字符。在displayBoard中你用%c格式符输出时,printf会将传入的指针地址的低8位当做ASCII值解析,你当前运行环境下"@"字符串的地址低8位刚好对应'f'的ASCII值(0x66),因此输出全为f。
  • 类型转换不合法:C中字符串字面值(如"@"、"X")属于const char*类型,直接赋值给非const的char*属于违规类型转换,高版本C标准下会直接编译报错,属于未定义行为。
  • 冗余无效代码:你写的多个printf("\n---|---|---\n", Board[0][0], Board[0][1], Board[0][2]);中,格式化字符串没有对应占位符,后面三个参数完全无效,属于冗余内容。
修复后的基础实现

直接将二维数组改为存储char类型的单个字符即可,符合你的使用需求:

#include <iostream>
using namespace std;

// 改为char类型的二维数组,存储单个字符
char Board[3][3];
const char PLAYER = 'X';
const char COMPUTER = 'O';
const char INIT_CHAR = '@';

void displayBoard() {
    printf(" %c | %c | %c ", Board[0][0], Board[0][1], Board[0][2]);
    printf("\n---|---|---\n");
    printf(" %c | %c | %c ", Board[1][0], Board[1][1], Board[1][2]);
    printf("\n---|---|---\n");
    printf(" %c | %c | %c ", Board[2][0], Board[2][1], Board[2][2]);
    printf("\n---|---|---\n");
}

void FillBoard() {
    for (int i=0; i<3; i++) {
        for (int j=0; j<3; j++) {
            Board[i][j] = INIT_CHAR;
        }
    }
}

int main () {
    FillBoard();
    displayBoard();
    return 0;
}
更推荐的C++风格实现

使用标准库容器std::array替代原生数组,安全性更高,也支持直接批量初始化:

#include <iostream>
#include <array>
using namespace std;

constexpr int BOARD_SIZE = 3;
constexpr char PLAYER = 'X';
constexpr char COMPUTER = 'O';
constexpr char INIT_CHAR = '@';

// 使用std::array管理二维数组,越界访问有检查、生命周期自动管理
array<array<char, BOARD_SIZE>, BOARD_SIZE> Board;

void displayBoard() {
    for (int i = 0; i < BOARD_SIZE; ++i) {
        cout << " " << Board[i][0] << " | " << Board[i][1] << " | " << Board[i][2] << endl;
        if (i != BOARD_SIZE - 1) {
            cout << "---|---|---" << endl;
        }
    }
}

void FillBoard() {
    // 批量初始化,无需嵌套循环写法更简洁
    for (auto& row : Board) {
        row.fill(INIT_CHAR);
    }
}

int main () {
    FillBoard();
    displayBoard();
    return 0;
}

内容的提问来源于stack exchange,提问作者solid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:24:03