我正在尝试在RHEL 5.6,64位上编译以下内容,并且我一直收到警告
“var.c:7:警告:格式'%d'需要 输入'int',但参数2有类型 'long unsigned int'“
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int n =10;
printf("The size of integer is %d\n", sizeof(n));
}
如果我将“n”的声明更改为以下
,则无关紧要我想要做的就是在我的机器上打印整数的大小,而不是真正研究limits.h。
答案 0 :(得分:41)
sizeof函数返回size_t
类型。尝试使用%zu
作为转化说明符,而不是%d
。
printf("The size of integer is %zu\n", sizeof(n));
澄清一下,如果您的编译器支持C99,请使用%zu
;否则,或者如果您想要最大的可移植性,打印size_t
值的最佳方法是转换它
到unsigned long
并使用%lu
。
printf("The size of integer is %lu\n", (unsigned long)sizeof(n));
原因是标准保证size_t
为无符号类型;但是标准没有规定它必须具有任何特定的大小(只要大到足以表示任何对象的大小)。实际上,如果unsigned long不能代表您环境的最大对象,您甚至可能需要使用unsigned long long cast和%llu
说明符。
在C99中,添加了z长度修改器以提供一种方法来指定要打印的值是size_t类型的大小。使用%zu
表示正在打印的值是size_t
大小的无符号值。
这是你不应该考虑它的事情之一,但你确实如此。
进一步阅读:
答案 1 :(得分:4)
您的问题是size_t是无符号类型。尝试使用
printf("The size of integer is %u\n", sizeof(n));
你应该摆脱那个警告。
答案 2 :(得分:-4)
我认为你应该写这个:
printf("The size of integer is %d\n", sizeof(int));