将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告

Posted

技术标签:

【中文标题】将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告【英文标题】:Getting warnings when assigning characters to a 2d array declared using malloc in C 【发布时间】: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);

【问题讨论】:

没有二维数组。指针不是数组。 【参考方案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 的单个循环不会填充所有内容。

【讨论】:

非常感谢,这真的很有帮助。

以上是关于将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告的主要内容,如果未能解决你的问题,请参考以下文章

试图将钱分配给在其 Steam 名称 Glua 中具有特定字符串的用户

如何将按键分配给在循环中创建的 QPushButton

分配内存malloc()和free()

malloc 和全局变量声明在 C 中将它们的变量分配到哪里? [复制]

CUDA C

C - 声明变量并调用 malloc