c - 如何在二维字符数组中存储单个字符?

标签 c arrays pointers casting char

我只是想创建一个包含“包含单个字符的数组”的数组。 所以我写道:

#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

这是为什么呢?我想也许是因为如果出现一些奇怪的选角问题或者因为指针,我就迷路了。谢谢!

最佳答案

char *field[20][20];这是一个指向 char(也称为字符串)的指针的二维数组,而不是字符的二维数组。

printf("%c",field[i][j]); 这会导致未定义的行为,因为您使用 %c 来打印字符串,如 I'我们说过 field[i][j]char * 类型,而不是 char 类型。请打开编译器警告并且不要忽略它们。您的编译器应该已标记此错误。

一旦将代码更改为二维字符数组,一切都应该正常工作:

char field[20][20];

// ...

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

关于c - 如何在二维字符数组中存储单个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59735058/

相关文章:

c - 如何在包含 char * 指针的结构**中存储动态字符串

c - C 中的面向对象程序 - 列表

android - 我如何为 NDK 工具链的 gcc 添加 <bluetooth/bluetooth.h>

java - 字节数组到 int java 在 Windows 中工作而不是在 linux 中

C++:静态指针、静态对象和动态内存分配

c++ - 动态分配数组和静态数组的区别

C:内存使用和数组问题

c - 将 C 程序分成 void 函数

Ruby:如何将变量设置为 0,或者如果已经设置,则递增 1

python - Numpy 3d 数组删除每行的第一个条目