【问题标题】:Getting warnings when assigning characters to a 2d array declared using malloc in C将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告
【发布时间】:2016-02-09 13:47:02
【问题描述】:

我正在学习如何使用 malloc 创建动态数组。我正在尝试为其分配字符,然后打印它们。该程序在我运行时可以运行,但是我不断收到以下警告:

位置 (1):警告:不兼容的整数到指针转换从 'int' [-Wint-conversion] 分配给 'char *'

Location(2):警告:格式指定类型“int”但参数的类型为“char *”[-Wformat]

如何解决此问题,为什么我不断收到此警告?

int main(void) {  
     char **board = (char **) malloc(26*26*sizeof(char));

    for(int i = 0; i < 25; i++) {
        *(board + i) = i + 'a'; //location (1)
        printf("%c\n", *(board + i)); //location (2)
    }
    free(board);

    return (EXIT_SUCCESS);
}

【问题讨论】:

  • 没有二维数组。指针不是数组。

标签: c arrays pointers


【解决方案1】:

类型

*(board + i)

是 char* 并且您正在尝试为其分配 int 类型的值。这就是编译器在两种情况下都抱怨的 - char* 不是 int!

我建议您知道要固定的大小(26x26),您只需使用普通的二维数组

char board[26][26];

因为似乎不需要使用动态分配。

如果您想坚持使用 malloc 的方法,请先创建一个包含 26 个 char* 的数组,然后为每个数组分配一个包含 26 个 char 的动态数组。

类似的东西

char* board[26];
for (int i = 0; i < 26; i++)
{
    board[26] = malloc(26*sizeof(char));
}

您还需要有 2 个循环来填充表格,因为从 0 到 25 的单个循环不会填充所有内容。

【讨论】:

  • 非常感谢,这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 2014-01-14
  • 1970-01-01
  • 2021-12-07
  • 2022-01-08
相关资源
最近更新 更多