从char *分配给void *

问题描述

正在处理一个黑客级别的问题,C语言中的“打印”令牌。我的问题并非来自问题的逻辑。也就是说,找到空间并打印一个“ \ n”,而不是它来自所给出的代码

char *s;
s = malloc(1024 * sizeof(char));
scanf("%[^\n]",s);
s = realloc(s,strlen(s) + 1);

我正在Mac终端窗口上进行编译,并且从char *到void *的类型不兼容 我已经尝试了一些方法包括类型转换,但是这似乎使我更加陷入困境。 有人可以解释我的问题吗? 谢谢

解决方法

如果将其编译为C ++,则必须将malloc(在C ++中很少使用)和realloc的void *返回值强制转换为char *。 C ++对这些事情有更严格的规定。正确的方法是使用一种较新的模板化强制转换运算符,例如reinterpret_cast 。但是,简单的(char *)应该仍然可以正常工作:

s = (char*)malloc(...)

由于代码看起来像普通的C语言,可能是1980年代编写的那种代码,所以最好的办法是将源文件命名为something.c(而不是something.cpp或something.cxx等)。然后,编译器将使用更宽松的C规则,发出一些警告,但可能不是错误。尽管要小心,但C定义了较新的版本,我一直都没有跟上,而且编译器正在开发新的错误和警告检测类型,包括静态分析技术,无论如何仍会报告错误。