Ado*_*aim 1 c warnings visual-studio-2012
当我编译以下代码时,Visual studio显示C4477的警告.为什么这个警告由visual studio产生?我该如何修复此代码?
警告:警告C4477:'printf':格式字符串'%d'需要类型为'int'的参数,但是variadic参数1的类型为'int*'
#include <stdio.h>
int main(void) {
int num = 0;
int *pi = #
printf("Address of num: %d Value: %d\n", &num, num);
printf("Address of pi: %d Value: %d\n", &pi, pi);
return 0x0;
}
Run Code Online (Sandbox Code Playgroud)
因为您使用的格式说明符不正确.%d是打印一个int.要打印指针,请使用%p并转换为void*:
printf("Address of num: %p Value: %d\n", (void*)&num, num);
printf("Address of pi: %p Value: %p\n", (void*)&pi, (void*)pi);
Run Code Online (Sandbox Code Playgroud)
到演员void*,因为可变参数功能不从做任何类型的转换需要type *以void *按要求%p.引用标准:
7.21.6格式化输入/输出功能(C11草案)
p参数应该是指向void的指针.指针的值以实现定义的方式转换为打印字符序列.