&引用;赋值从指针生成整数,无需强制转换;在c中

&引用;赋值从指针生成整数,无需强制转换;在c中,c,multidimensional-array,compiler-warnings,dynamic-memory-allocation,gcc-warning,C,Multidimensional Array,Compiler Warnings,Dynamic Memory Allocation,Gcc Warning,我正处于c程序的后期阶段,这是一个动态单词搜索。当我编译这些行时,我得到了“警告:赋值从指针生成整数而不使用强制转换[默认启用]”: **grid = gridReal; **items = itemsReal; **solution = solutionReal; 到目前为止,我的主要观点如下: int main() { char gridReal[50][50];/*Array to hold puzzle*/ char itemsReal[100][50];/*Array to hold

我正处于c程序的后期阶段,这是一个动态单词搜索。当我编译这些行时,我得到了“警告:赋值从指针生成整数而不使用强制转换[默认启用]”:

**grid = gridReal;
**items = itemsReal;
**solution = solutionReal;
到目前为止,我的主要观点如下:

int main()
{
char gridReal[50][50];/*Array to hold puzzle*/
char itemsReal[100][50];/*Array to hold words*/
char solutionReal[50][50];/*Array to hold solution*/
int dimension;/*Width and height*/
int x, y;/*Counters for printing*/

char** grid = (char**)malloc(sizeof(char)*100*50);
char** items = (char**)malloc(sizeof(char)*100*50);
char** solution = (char**)malloc(sizeof(char)*100*50);

**grid = gridReal;
**items = itemsReal;
**solution = solutionReal;

有什么办法解决这个问题吗?

**grid
属于
char
类型。您不能将衰减后的
gridReal
类型为
char(*)[50]
grid
分配给
**grid
。始终记住,数组不是指针。指向指针的指针并不意味着二维数组。

您似乎想要将内存从例如
gridReal
复制到
grid
。首先,您必须记住,指向某种类型的指针的指针与一个或多个相同类型的数组不同。内存布局根本不兼容。其次,您不能简单地将数组分配给这样的指针,并期望复制数据

而是首先分配外部“维度”,然后在循环中分配(并复制)第二个“维度”:

char**grid=malloc(50));
对于(int i=0;i<50;++i)
{
grid[i]=malloc(sizeof(gridReal[0]);
memcpy(grid[i]、gridReal[i]、sizeof(gridReal[i]);
}

**grid
属于
char
类型,您正在尝试分配
char(*)[50]
(gridReal衰减到的类型)。显然,它不会编译。您试图通过这些赋值实现什么?您不能使用C中的
=
运算符复制数组,而且您还没有初始化它们。如果您只是试图将数组的地址分配给指针,为什么要执行这些
malloc()
s并扔掉你的参考资料?为什么要分配这三个区域两次?声明
char gridReal[50][50]
创建空间。再次调用malloc,然后分配给grid是很奇怪的……当你显然不知道自己在做什么时,不要使用强制转换。编译器诊断是有原因的。好吧。那么有什么建议吗?实际上,在衰减之后,
gridReal
属于
char(*)类型[50]
@FilipeGonçalves;正确。我错过了。感谢大家。能够键入cast来消除警告:grid=(char**)gridReal;items=(char**)itemsReal;solution=(char**)solutionReal;现在是清除seg错误的时候了。所以你的解决方案是使用丑陋的强制转换来欺骗编译器?如果这就是你修复代码的方式,我并不奇怪你会有seg错误。是的,我不是很好,先生。有什么办法代替强制转换吗?
char **grid = malloc(50));

for (int i = 0; i < 50; ++i)
{
    grid[i] = malloc(sizeof(gridReal[0]);
    memcpy(grid[i], gridReal[i], sizeof(gridReal[i]));
}