printf 是否需要 %zu 说明符?
Is the %zu specifier required for printf?
我们在嵌入式平台上使用 C89。我试图打印出 size_t
,但没有成功:
#include <stdio.h>
int main(void) {
size_t n = 123;
printf("%zu\n",n);
return 0;
}
而不是 123
,我得到了 zu
。
其他说明符工作正常。
如果 size_t
存在,zu
不应该在 printf
中可用吗?
这是我应该联系我的图书馆供应商的事情,还是允许图书馆实施排除它?
If size_t exists shouldn't zu also be available in printf?
size_t
至少自 C89 以来就存在,但相应的格式说明符 %zu
(特别是长度修饰符 z
)仅在 C99 之后才添加到标准中。
因此,如果您不能使用 C99(或 C11)并且不得不在 C89 中打印 size_t
,您只需要回退到其他现有类型,例如:
printf("%lu\n", (unsigned long)n);
这工作正常。在我的系统中,它正在打印预期值。
由于编译器,您可能会收到错误。我正在使用 GCC 编译器。如果您只有这个并尝试获取输出,请先更新 GCC,然后再尝试。它会起作用。
size_t 由 sizeof() 编辑 return。 %zu 说明符打印 length.So 到 return n 的大小,代码应为:#include
int main(void) { size_t n=123; printf("%zu\n",sizeof(n)); return 0;`}
我们在嵌入式平台上使用 C89。我试图打印出 size_t
,但没有成功:
#include <stdio.h>
int main(void) {
size_t n = 123;
printf("%zu\n",n);
return 0;
}
而不是 123
,我得到了 zu
。
其他说明符工作正常。
如果 size_t
存在,zu
不应该在 printf
中可用吗?
这是我应该联系我的图书馆供应商的事情,还是允许图书馆实施排除它?
If size_t exists shouldn't zu also be available in printf?
size_t
至少自 C89 以来就存在,但相应的格式说明符 %zu
(特别是长度修饰符 z
)仅在 C99 之后才添加到标准中。
因此,如果您不能使用 C99(或 C11)并且不得不在 C89 中打印 size_t
,您只需要回退到其他现有类型,例如:
printf("%lu\n", (unsigned long)n);
这工作正常。在我的系统中,它正在打印预期值。 由于编译器,您可能会收到错误。我正在使用 GCC 编译器。如果您只有这个并尝试获取输出,请先更新 GCC,然后再尝试。它会起作用。
size_t 由 sizeof() 编辑 return。 %zu 说明符打印 length.So 到 return n 的大小,代码应为:#include
int main(void) { size_t n=123; printf("%zu\n",sizeof(n)); return 0;`}