如何在C中打印int的大小?

时间:2011-05-10 00:18:08

标签: c

我正在尝试在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”的声明更改为以下

,则无关紧要
  1. signed int n = 10;
  2. int n = 10;
  3. 我想要做的就是在我的机器上打印整数的大小,而不是真正研究limits.h。

3 个答案:

答案 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));