在c语言中为指针分配内存时遇到问题

在c语言中为指针分配内存时遇到问题,c,compiler-errors,C,Compiler Errors,我有一个char类型的指针变量,声明方式如下: char *name; 因此,为了将其转换为80个字符的字符串,我做了下一件事: name=malloc(sizeof(char)*80); 这在学校很管用,但当我回家时,我犯了一个错误: error: invalid conversion from 'void*' to 'char*' [-fpermissive] 编译器与编译和构建代码完全相同 问题出在哪里?malloc返回类型为void*的指针 Value*/Cuff>自动地和安全地被

我有一个char类型的指针变量,声明方式如下:

char *name;
因此,为了将其转换为80个字符的字符串,我做了下一件事:

name=malloc(sizeof(char)*80);
这在学校很管用,但当我回家时,我犯了一个错误:

error: invalid conversion from 'void*' to 'char*' [-fpermissive]
编译器与编译和构建代码完全相同


问题出在哪里?

malloc
返回类型为
void*
的指针<代码> Value*/Cuff>自动地和安全地被提升到C中的任何其他指针类型,但不是C++中的。如果你在C++中编译而不是C.,你只能出现错误,<>强> >“<代码> MalOC 的结果>如果你在C++中编译,并且<强>不应该< /强>,如果你在C.< /P> < P>编译,我认为问题是由于不同的编译器版本/编译模式造成的!p> 解决办法是:

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个整数值分配内存空间。< /P>是否编译C++模式?在C中,<代码> VUL**/COD>与任何其他指针类型兼容。你可能编译在C++模式下,在代码< > MalCube()//Cube >中需要明确的强制转换(然后,为什么在C++中使用<代码> MalOC < /COD>?)我做了一个cpp而不是c,哈哈,我不能再编辑它了…@iharob为什么这么严肃?很好地抓住了81对80。不同意使用

name=malloc(81*sizeof*name)“使用强制转换更好地表达您的意图!”更易于编码和维护。是的,对!name=malloc(81*sizeof(*name));更容易掌握。:)