我正在尝试打印出的值argv
此时在我的代码中,但是当我尝试编译它时,我得到warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘char **
。我不确定这个警告是什么意思。是%p
不适合用于argv
即使它是一个指针?
int main(int argc, char* argv[])
{
printf("%s%p", "argv = ", argv);
}
那你为什么不投呢?
printf("argv = %p\n", (void *)argv);`
The %p
指定了指针(POSIXprintf(); C11 §7.21.6.1fprintf功能):
p
— 参数应该是一个指向void
。指针的值以实现定义的方式转换为打印字符序列。
Since char **
不是一个void *
,您需要进行显式转换。标准不允许编译器进行转换void *
对你来说——声明中的省略号printf()
意味着发生默认参数提升,但这仅影响float
类型和小于的整数类型int
(short
, char
, etc).
在当今的大多数机器上,这是一个空操作。在我学习 C 语言编程的(早已过时的)机器上,没有void *
然而(对于标准来说太旧了),但等效的是char *
,以及a的值char *
给定内存位置的地址与任何其他类型的指针值不同 - 强制转换不是可选的。
请注意,我假设您打算打印地址的值。如果您打算打印内容,那么还有更多工作要做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)