在c语言中为指针分配内存时遇到问题
我有一个char类型的指针变量,声明方式如下:在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 *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));更容易掌握。:)