内置函数malloc中的不兼容声明和c中赋值错误中的不兼容类型

时间:2010-04-18 18:04:19

标签: c

 char 
 char* c[30];
    c = (char*) malloc(30*sizeof(char) );

这如何在内置函数警告中提供不兼容的声明,以及在我声明malloc的行中赋值错误中的不兼容类型。根据malloc的语法,我不应该有任何错误

5 个答案:

答案 0 :(得分:1)

您已将c声明为数组。您无法更改数组的值,并且数组不是指针。

c的类型为(char*)[30](即一个包含30个字符串指针的数组),而不是char*

如果您尝试为30个字符创建动态分配的char“数组”,请使用

char *c = malloc(30);

如果你真的想要一个包含30个char指针的数组,例如在每个元素中为30个字符分配空间,使用

int i;
for(i = 0; i < sizeof c/sizeof c[0]; i++) {
  c[i] = malloc(30);
  if(c[i] == NULL) {
    //handle error
   }
}

答案 1 :(得分:1)

你必须#include <stdlib.h>

答案 2 :(得分:0)

c是一个指针数组。然后你试图为整个数组分配一个指针。

尝试

char *c = malloc(30 * sizeof(char));

或者如果你真的需要30个元素,每个元素指向一个30个字符的malloc ed数组,你就必须进行循环。

#define CHUNKSIZE 30
int i;
char *c[CHUNKSIZE];
for (i = 0; i < CHUNKSIZE; i++)
{
    c[i] = malloc(CHUNKSIZE * sizeof(char));
}

答案 3 :(得分:0)

使用此:

char* c;
c = (char*)malloc(30*sizeof(char));

你宣称的是一个由30个char指针组成的数组。这就是为什么你在malloc句子上得到不兼容的声明。

你可以做到这一点:

c[0] = (char*)malloc(30*sizeof(char) );
c[1] = (char*)malloc(30*sizeof(char) );
...

答案 4 :(得分:0)

每个定义的

sizeof (char)始终为1,因此您无需编写它。

在C malloc中返回一个void *,因此不需要进行类型转换(甚至有害,因为它会抑制有用的警告,不要忘记#include <stdlib.h>#include <memory.h>)。< / p>

char* c[30]; 

声明一个30 char *的数组,可能不是你的想法。

如果你想要一个30 char的数组,你应该声明

char c[30]; 

忘记了malloc。

如果你想在char数组上找到一个长度为30的指针,那么你应该写一下:

char *c;
c = malloc(30);