将字符分配给在 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 中具有特定字符串的用户