Как хранить отдельные символы в массиве двумерных символов? - PullRequest
0 голосов
/ 14 января 2020

Я просто хочу создать массив, который содержит «массивы, которые содержат одиночные символы». Поэтому я написал:

#include <stdio.h>

int main(){
char *field[20][20];
    for(int i=0;i<20;i++){ //makes blank 2d field with spaces only
        for(int j=0;j<20;j++){
            field[i][j]=" ";
        }
    }

    //debug field visualisation
    for(int i=0;i<20;i++){
                for(int j=0;j<20;j++){
                    printf("%c",field[i][j]);
                }
                printf("\n");            
        }

        return 1;
}

Но странным образом я получаю «D» вместо «» в качестве вывода для каждого элемента поля:

    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD
    DDDDDDDDDDDDDDDDDDDD

Почему это так? Я думаю, может быть, это потому, что если какие-то странные проблемы с кастингом или из-за проблем, я заблудился. Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Вы определяете массив полей 20x20 с помощью char *, поэтому Char Arrays (аналогично строкам). Если вы действительно хотите хранить только символы в этом массиве, измените

char *field[20][20];

на

char field[20][20];

Затем, при инициализации массива, измените

field[i][j]=" "

в строка от 7 до

field[i][j]=' '

С "" вы сохраняете массивы символов, с "" только символы.

Это может решить вашу проблему.

0 голосов
/ 14 января 2020

char *field[20][20]; это двумерный массив указателей на символ (он же строка), а не двумерный массив символов.

printf("%c",field[i][j]); Это приводит к неопределенному поведению, поскольку вы используете %c для выведите строку, как я уже сказал, field[i][j] имеет тип char *, а не char. Пожалуйста, включите предупреждения вашего компилятора и не игнорируйте их. Эта ошибка должна была быть помечена вашим компилятором.

Как только вы измените свой код на 2d массив символов, все должно работать правильно:

char field[20][20];

// ...

field[i][j] = ' ';
//            ^
//            notice we assign char and not string
...