代码之家  ›  专栏  ›  技术社区  ›  bradtgmurray

使用printf打印尺寸的正确方法是什么?

c c++
  •  66
  • bradtgmurray  · 技术社区  · 15 年前

    Size_t 定义为 unsigned 整数,但它的大小取决于您使用的是32位还是64位机器。打印出一个 size_t ?

    3 回复  |  直到 7 年前
        1
  •  94
  •   msc    7 年前

    尝试使用 %zu 格式化字符串

    size_t val = get_the_value();
    printf("%zu",val);
    

    Z部分是一个长度说明符,表示参数的长度将是大小T。

    源- http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

        2
  •  8
  •   David Thornley    15 年前

    上面有一个C++标签,所以 cout << 是另一个可能的答案。

    这在C90的所有版本中都很难得到正确的答案。 unsigned long 应该可以,但这在C99中可能不起作用,而且C99解决方案在C90中不一定起作用。1995年的变化中引入了可靠区分C90和C99的能力(规定了 __STDC__ )我认为对于C90、C99和C++,没有一种完全可移植的方法,尽管对于其中的任何一种都有解决方案。

        3
  •  7
  •   D.Shawley    15 年前

    我认为C++的答案是:

    std::size_t n = 1;
    std::cout << n;
    

    对于C-Style IO来说,这有点复杂。在C99中,他们添加了 z 长度修饰符 size_t 价值观。但是,在TR1之前,这是不受支持的,因此您可以将铸件保留到特定尺寸,如:

    std::size_t n = 1;
    std::printf("%lu\n", static_cast<unsigned long>(n));
    

    再一次, unsigned long long 事实上,C++并没有真正支持,所以上面的工作会很好。 unsigned long 是最大的法律完整类型。在TR1之后,您可以使用 %zu 安全地 西泽特 价值观。