1

我正在尝试制作一个字符数组,但我不能正确执行此操作,我不断收到警告消息:

警告:赋值从没有强制转换的指针生成整数

我想创建一个 8 列乘 4 行的数组,但是当我单步执行该数组时,编译器只给了我一个 8 个字符串的数组,这是我的代码:

// Array of 8 columns by 4 rows  
char GameBoardDisplay[8][4];
// 4x4 matrix that is zero filled for the moment
int GameBoardTrack [4][4];


           //Steps through the matrix one by one and places characters in array
           for ( rowtrack = 0, rowtrack2 = 0 ; rowtrack != 4 ; rowtrack++, rowtrack2++){
            for (coltrack = 0, coltrack2= 0 ; coltrack !=4 ; ++coltrack){
               if(!GameBoardTrack[rowtrack][coltrack]){

                       GameBoardDisplay[rowtrack2][coltrack2] = '_';
                       ++coltrack2;

                   if (coltrack == 3){
                       GameBoardDisplay[rowtrack2][coltrack2] = '\n';
                   }
                   else
                       {
                       GameBoardDisplay[rowtrack2][coltrack2] = ' ';
                      ++coltrack2
               }
           }
       }

我是否以错误的方式思考 char GameBoardDisplay[8][4]?我认为它有 32 个位置来放置一个我可以返回并重写的字符,但由于某种原因,它只生成了一个由 8 个字符串组成的数组。

4

3 回答 3

4

"_"是一个字符串,由字符'_'和组成'\0'。你想要一个角色:

GameBoardDisplay[rowtrack2][coltrack2] = '_';

这同样适用于:

GameBoardDisplay[rowtrack2][coltrack2] = '\n';

和:

GameBoardDisplay[rowtrack2][coltrack2] = ' ';

以下是字符常量字符串 litteral的语法。

C11 (n1570),第 6.4.4.4 节字符常量

character-constant: ' c-char-sequence '

C11 (n1570),第 6.4.5 节字符串文字

string-literal: encoding-prefixopt " s-char-sequenceopt "
于 2013-03-02T18:00:54.650 回答
1

"_","\n"用双引号括起来的所有内容都是 C 字符串文字,它的类型是const char[]. 要输入单个字符,请使用单引号/撇号,如下所示:

GameBoardDisplay[rowtrack2][coltrack2] = '_';
于 2013-03-02T18:01:53.957 回答
0

除了这里所有关于“a”是一个字符串和“a”是一个字符和所有的答案(你也应该改变)之外,另一个问题(这可能是“警告:赋值从指针中生成整数而没有a cast") 是您在将变量 GameBoardDisplay声明为 2D 字符数组之后立即将其重新声明为 2D 整数数组。

你可以试试,

char GameBoardDisplay[8][4];
// 4x4 matrix that is zero filled for the moment
//int GameBoardDisplay [4][4];


           //Steps through the matrix one by one and places characters in array
           for ( rowtrack = 0, rowtrack2 = 0 ; rowtrack != 4 ; rowtrack++, rowtrack2++){
            for (coltrack = 0, coltrack2= 0 ; coltrack !=4 ; ++coltrack){
               if(!GameBoardTrack[rowtrack][coltrack]){

                       GameBoardDisplay[rowtrack2][coltrack2] = '_';
                       ++coltrack2;

                   if (coltrack == 3){
                       GameBoardDisplay[rowtrack2][coltrack2] = '\n';
                   }
                   else
                       {
                       GameBoardDisplay[rowtrack2][coltrack2] = ' ';
                      ++coltrack2
               }
           }
       }
于 2013-03-02T18:12:39.283 回答