Преобразование в char в char [1] с двойными матричными переменными - PullRequest
0 голосов
/ 25 сентября 2018

Привет, я использую переменную:

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 голосов
/ 25 сентября 2018

Две связанные проблемы:

  • Вы не можете сделать 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 простым присваиванием =.

0 голосов
/ 25 сентября 2018

Измените

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

на

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

. Идентификатор представляет собой массив символов размера 1. И board[i][j] представляет собой символ

Или измените типдля identifier до char, поскольку его размер составляет 1

char identifier;
...