char
char* c[30];
c = (char*) malloc(30*sizeof(char));
这是如何给不兼容的声明中内置的功能,预警和和不兼容的类型分配错误在我宣布的malloc行。根据malloc的语法,我不应该有任何错误不兼容的声明中内置的函数malloc和不兼容的类型分配错误在C
char
char* c[30];
c = (char*) malloc(30*sizeof(char));
这是如何给不兼容的声明中内置的功能,预警和和不兼容的类型分配错误在我宣布的malloc行。根据malloc的语法,我不应该有任何错误不兼容的声明中内置的函数malloc和不兼容的类型分配错误在C
您已经声明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
}
}
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));
}
仍然警告仍然存在.. – Hick 2010-04-18 18:21:03
使用此:
char* c;
c = (char*)malloc(30*sizeof(char));
什么你宣布的是30个字符指针数组。这就是为什么你在malloc
句子中得到不兼容的声明。
你可以这样做,但:
c[0] = (char*)malloc(30*sizeof(char));
c[1] = (char*)malloc(30*sizeof(char));
...
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);
你必须#include <stdlib.h>
基本上几个你的其他的欺骗的问题。 – 2010-04-18 18:11:46
我的警告仍然继续,即使我留意所有的建议和给出的答案,这就是为什么我继续张贴.. – Hick 2010-04-18 19:11:35