【问题标题】:assignment from char * to a void *从 char * 到 void * 的赋值
【发布时间】:2020-12-10 06:04:55
【问题描述】:

处理黑客级别的问题,C 中的打印标记。我的问题不是来自问题的逻辑。即找到空间并打印一个 '\n' 而不是它来自给定的代码。

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

我在 Mac 终端窗口上编译,并得到一个从 char * 到 void * 的不兼容类型 我尝试了一些方法,包括类型转换,但这似乎让我陷入了更深的麻烦。 有人可以解释我的问题是什么吗? 谢谢

【问题讨论】:

  • 看来您正在将程序编译为 C++ 程序。

标签: c pointers void-pointers char-pointer


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多