char
char* c[30];
c = (char*) malloc(30*sizeof(char) );
这如何在内置函数警告中提供不兼容的声明,以及在我声明malloc的行中赋值错误中的不兼容类型。根据malloc的语法,我不应该有任何错误
答案 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);