使用双矩阵变量将char转换为char [1]

时间:2018-09-25 08:57:11

标签: c pointers struct char

嗨,我正在使用变量:

char board[9][9] = {
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, /* Game board */
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
    {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}
};

我想做的是使用看起来像这样的结构:

typedef struct {
    int adjacent_mines;
    bool revealed;
    bool is_mine;
    char identifier[1];
} Tile;

struct GameState {
    Tile tiles[NUM_TILES_X][NUM_TILES_Y];
};
typedef struct GameState GameState;

这样我便可以使用以下功能将字符附加到我的board[][]

for (int i = 0; i < NUM_TILES_X; i++) {
    for (int j = 0; j < NUM_TILES_Y; j++) {
        board[i][j] = tileInfo.tiles[i][j].identifier;
    }
}

使用以下方法设置了tileInfo.tiles[i][j].identifier的地方:

strcpy(tileInfo->tiles[x][y].identifier, "*");

我在控制台上得到的输出是incompatible pointer to integer conversion assigning to 'char' from 'char [1]',我该如何解决这个问题,有人可以解释一下发生了什么吗?对不起,如果它愚蠢,我是C和指针的新手

2 个答案:

答案 0 :(得分:2)

更改

board[i][j] = tileInfo.tiles[i][j].identifier;

board[i][j] = tileInfo.tiles[i][j].identifier[0];

identifier是大小为1的字符数组。board[i][j]是一个字符

或者将大小为1的identifier的类型更改为char

char identifier;

答案 1 :(得分:2)

两个相关问题:

  • 您无法将strcpy(tileInfo->tiles[x][y].identifier, "*");放入char identifier[1];中,因为您没有为空终止符分配空间。如果您想将其用作字符串而不是单个字符,则必须执行char identifier[2];
  • board[i][j] = tileInfo.tiles[i][j].identifier;不起作用,因为board[i][j]是单个字符,而identifier是数组。

您需要确定identifier应该是什么-一个字符还是一个字符串?现在两者都不是。最简单的方法是,使它char identifier;不用数组符号,然后用简单的赋值strcpy替换=