无法在c中为内存分配内存

时间:2015-04-09 14:03:48

标签: c compiler-errors

我有一个以这种方式声明的char类型的指针变量:

char *name;

所以要把它变成80个字符的字符串我接下来就做了:

name=malloc(sizeof(char)*80);

这在学校工作得很好但是当我回到家时我得到了这个错误:

error: invalid conversion from 'void*' to 'char*' [-fpermissive]

编译器与编译和构建代码完全相同。

问题是什么?

2 个答案:

答案 0 :(得分:3)

malloc返回类型为void*的指针。 void*被自动安全地提升为C中的任何其他指针类型,但不能在C ++中提升。只有在使用C ++而不是C进行编译时才会出现错误。如果您使用C ++编译并且不应该应该强制转换malloc的结果,如果你是用C编译的。

答案 1 :(得分:1)

我认为问题是由于不同的编译器版本/编译模式!

解决方案是:

char * name;

/* 81 bytes because in C the strings must be terminated by a binary code 0x00.
- ASCII0 strings  */

name = (char *)malloc(81*sizeof(char));

----------------------------------------------------------

malloc函数声明为:

void *malloc (size_t __size)

然后你最好用演员表现你的意图!

另一个例子:

int *numbers;

numbers=(int *)malloc(200*sizeof(int));

为200个整数值分配内存空间。