2010-04-18 28 views
1
char 
char* c[30]; 
    c = (char*) malloc(30*sizeof(char)); 

这是如何给不兼容的声明中内置的功能,预警和和不兼容的类型分配错误在我宣布的malloc行。根据malloc的语法,我不应该有任何错误不兼容的声明中内置的函数malloc和不兼容的类型分配错误在C

+0

基本上几个你的其他的欺骗的问题。 – 2010-04-18 18:11:46

+0

我的警告仍然继续,即使我留意所有的建议和给出的答案,这就是为什么我继续张贴.. – Hick 2010-04-18 19:11:35

回答

1

您已经声明c作为数组。您不能更改数组的值,并且数组不是指针。

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

如果你想创建30个字符一个动态分配的字符“阵列”,使用

char *c = malloc(30); 

如果你真的想要的30个字符指针数组,例如在它的每个元素的30个字符分配空间,使用

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

我认为这个例子不是一个很好的做法,学习。你需要(char *)=从Class中知道引用Class和malloc + sizeof。对不起,你的回答没有说​​服我 – delive 2016-12-07 00:05:30

+0

@delive C中没有任何课程,也没有你不应该在那里演员 - 这被认为是不好的做法。并且你不需要char的大小。 – nos 2016-12-07 19:23:19

0

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

尝试

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

或者,如果你真的需要30个元素,每一个指向30个字符malloc版阵列,你将不得不作出一个循环。

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

仍然警告仍然存在.. – Hick 2010-04-18 18:21:03

0

使用此:

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

什么你宣布的是30个字符指针数组。这就是为什么你在malloc句子中得到不兼容的声明。

你可以这样做,但:

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

sizeof (char)每个定义始终为1,所以你不需要写。

在C malloc返回void *因此类型转换是不必要的(甚至是有害的,因为它抑制有用的警告,不要忘了#include <stdlib.h>#include <memory.h>)。

char* c[30]; 

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

如果你想在30 char数组,你应该申报

char c[30]; 

和忘记的malloc。

如果你想要一个char阵列恰好有30长度上的指针,那么你应该写:

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

你必须#include <stdlib.h>