【问题标题】:How to store single chars in a twodimensional char array?如何将单个字符存储在二维字符数组中?
【发布时间】:2020-05-01 06:06:44
【问题描述】:

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

#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

这是为什么呢?我想也许是因为如果有一些奇怪的选角问题或因为 poiters,我迷路了。谢谢!

【问题讨论】:

  • @Blaze 不,您的评论是错误的! , fieldpointers 的二维数组
  • 哦,哇,printf("%c",field[i][j]) 让我大吃一惊,当然标题说它是一个二维字符数组。在这种情况下,它应该是%s
  • 您是否收到关于声明 printf("%c",field[i][j]); 的任何警告?
  • @Blaze 我宁愿看一下定义。
  • 我投票决定重新打开,因为这个关闭的原因对这个问题没有意义。这个问题只问一个问题。

标签: c arrays pointers casting char


【解决方案1】:

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

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

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

char field[20][20];

// ...

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

【讨论】:

    【解决方案2】:

    您正在使用 char * 定义一个 20x20 的字段数组,因此是 char 数组(类似于字符串)。 如果您真的只想在该数组中存储字符,请更改

    char *field[20][20];
    

    char field[20][20];
    

    然后,在初始化数组时,更改

    field[i][j]=" "
    

    在第 7 行到

    field[i][j]=' '
    

    使用 " " 您存储 char 数组,使用 ' ' 只有字符。

    这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2011-07-04
      相关资源
      最近更新 更多