c中的malloc char数组指针给出了错误

时间:2014-03-31 07:34:49

标签: c

char (*cHighValue)[20];

cHighValue = malloc (X * sizeof(char *));

for (i = 0; i < X; ++i)
{
    cHighValue [i] = (char *) malloc (20 * sizeof(char));
}

给我错误:表达式必须是可修改的左值,对于&#34; cHighValue [i] =(char *)malloc(20 * sizeof(char));&#34;为什么呢?

5 个答案:

答案 0 :(得分:3)

cHighValue是指向char数组的指针。

分配为

cHighValue=malloc(sizeof(char)*20*X);

答案 1 :(得分:1)

您将cHighValue声明为指向20个字符数组的指针。但是在您的代码中,您将其用作指向指针数组的指针。您可能想要的是将cHighValue声明为指针数组,并且因为您在堆上分配它,您必须将其声明为指针指针。即:

char **cHighValue;

答案 2 :(得分:0)

cHighValue是一个指向20-char数组的指针,因此cHighValue[i]是第i个20字节长的字符数组。
并且chars数组不是可修改的左值,可以赋予malloc()返回的指针值。

要实现您(可能)想要的内容,请从cHighValue声明中删除括号。

答案 3 :(得分:0)

分配二维数组的正确方法是:

char (*cHighValue)[Y];

cHighValue = malloc( sizeof(char[X][Y]) );

特别要注意:

  • 不要使用多个malloc,因为它们不会给你一个真正的2D数组,而是一个分散的指针到指针查找表,它在整个堆中分配。这样的查找表不能与memset,memcpy等基本函数一起使用。
  • 在C中投射malloc的结果毫无意义。

答案 4 :(得分:-1)

这是数组的类型,

char* cHighValue[20];


cHighValue[0] = malloc (X * sizeof(char *));

for (i = 0; i < X; ++i)
{
     cHighValue[i] = (char *) malloc (20 * sizeof(char));
}