有什么好的方法可以去掉下面的警告吗?我知道这是一个类型问题,因为我传递的是 unsigned long pointer
而不是 unsigned long
,但是 printf 是否以某种方式支持指针作为参数?迂腐的我想去掉这个警告。如果不是,您如何处理使用 printf
打印取消引用的指针值?
#include <stdio.h>
int main (void) {
unsigned long *test = 1;
printf("%lu\n", (unsigned long*)test);
return 0;
}
警告:格式指定类型“unsigned long”但参数具有类型
最佳答案
unsigned long *test = 1;
是无效的 C。如果你想要一个指向值 1
的对象的指针,你可以这样做:
unsigned long a = 1;
unsigned long *test = &a;
或使用 C99 复合文字:
unsigned long *test = &(unsigned long){1UL};
现在还有:
printf("%lu\n", (unsigned long*)test);
不正确。你实际上想要:
printf("%lu\n", *test);
打印 unsigned long
对象 *test
的值。
要打印test
指针值(以实现定义的方式),您需要:
printf("%p\n", (void *) test);
关于c - printf 指针参数类型警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224917/