gpt4 book ai didi

c - 为什么我会收到关于 printf() with %s taking type void * as parameter 的警告?

转载 作者:行者123 更新时间:2023-12-02 05:49:01 26 4
gpt4 key购买 nike

我正在进行 C 编程,一种现代方法 第 19 章的编程项目 4。我的代码有效,但我收到此警告,试图将返回 void * 参数的函数传递给带有转换说明符 %sprintf

format %s expects argument of type char *, but argument 2 has type void * [-Wformat=]

我可以通过将函数的返回类型转换为 char * 来轻松摆脱警告,例如

printf("%s\n", (char *) function(param));

但我只想知道为什么需要这样做,因为类型 void * 会自动转换为另一种指针类型。

最佳答案

在这种情况下,编译器的提示是非常正确的。

根据您的逻辑本身,返回 void * 的函数可以返回一个转换为 void * 的结构指针,但是,%s将无法打印,不是吗?

因此,如果您知道自己在做什么,对于这种情况,您可以转换结果。

另外,正如其他人所指出的,也许值得一提的是,这个警告与标准规范无关,因为在标准中,没有对参数类型的限制。 (借用 Mr. @WhozCraig 的话)这个警告基本上是由于额外的类型检查层完全由编译器自己执行,由 -Wformat 标志启用在 gcc 中。

关于c - 为什么我会收到关于 printf() with %s taking type void * as parameter 的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30234244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com