我有一个以这种方式声明的char类型的指针变量:
char *name;
所以要把它变成80个字符的字符串我接下来就做了:
name=malloc(sizeof(char)*80);
这在学校工作得很好但是当我回到家时我得到了这个错误:
error: invalid conversion from 'void*' to 'char*' [-fpermissive]
编译器与编译和构建代码完全相同。
问题是什么?
答案 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个整数值分配内存空间。