14

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

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

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

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

4

3 回答 3

23

如果 size_t 存在,zu 不应该在 printf 中也可用吗?

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

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

printf("%lu\n", (unsigned long)n);
于 2016-12-21T13:54:18.287 回答
-4

size_t is returned by sizeof(). %zu specifier prints the length.So to return the size of n,the code should read: #include <stdio.h>

int main(void) { size_t n=123; printf("%zu\n",sizeof (n)); return 0;` }

于 2020-09-09T06:11:40.563 回答
-8

这工作正常。在我的系统中,它正在打印预期值。由于编译器,您可能会收到错误。我正在使用GCC编译器。如果您只有这个并尝试获取输出,请首先更新 GCC,然后尝试。它会起作用的。

你的程序输入

程序的输出

于 2018-03-30T05:26:46.520 回答