printf需要%zu说明符吗?

时间:2016-12-21 13:27:27

标签: c printf c89 size-t c-libraries

我们在嵌入式平台上使用C89。我试图打印出size_t,但它不起作用:

#include <stdio.h>
int main(void) {
    size_t n = 123;
    printf("%zu\n",n);
    return 0;
}

而不是123,我得到了zu 其他说明符正常工作。

如果size_t存在zuprintf也不能提供json吗? 这是我应该联系我的图书馆供应商的事情,还是允许排除它的图书馆实施?

3 个答案:

答案 0 :(得分:11)

  

如果size_t存在,那么printf中是否也不能使用zu?

size_t至少从C89开始存在,但相应的格式说明符%zu(特别是长度修饰符z)仅在C99之后才被添加到标准中。

因此,如果你不能使用C99(或C11)并且必须在C89中打印size_t,你只需要回退到其他现有类型,例如:

printf("%lu\n", (unsigned long)n);

答案 1 :(得分:-1)

这很好用。在我的系统中,它正在打印预期值。 由于编译器,您可能会收到错误。我正在使用 GCC 编译器。如果你只有这个,并试图获得输出第一次更新GCC,然后尝试。它会起作用。

Your program input

The output of the program

答案 2 :(得分:-1)

size_t由sizeof()返回。 %zu说明符将打印长度。因此要返回n的大小,代码应显示为:#include

int main(void){size_t n = 123; printf(“%zu \ n”,sizeof(n));返回0;`}