我刚在维基百科上找到这段代码。
链接:http://en.wikipedia.org/wiki/Sizeof#Use
代码:
/* the following code illustrates the use of sizeof
* with variables and expressions (no parentheses needed),
* and with type names (parentheses needed)
*/
char c;
printf("%zu,%zu", sizeof c, sizeof(int));
它声明:“应该使用z前缀来打印它,因为每个体系结构的实际大小可能不同。”
我在我的编译器上尝试了它,但它给出了以下结果:
zu,zu
发布于 2010-05-29 00:19:34
是的,语法是正确的(至少对于C99是正确的)。看起来你的编译器没有被设置来处理它。只要把z
拿出来,你可能就没问题了。为了正确,请确保您的printf
格式说明符与类型的大小相匹配。打开你的编译器给你的所有警告可能会在这方面有所帮助。
您的报价:
应该使用z前缀来打印它,因为每个体系结构的实际大小可能不同
指的是size_t
(由sizeof
运算符返回的类型)可以随体系结构的不同而变化的事实。z
旨在使您的代码更具可移植性。但是,如果您的编译器不支持它,这是不会工作的。只需摆弄%u
、%lu
等的组合,直到您得到有意义的输出。
发布于 2010-05-29 00:21:44
z
长度修饰符是在C99标准中添加到C中的;您可能有一个不支持C99的编译器。
如果你的C编译器不支持这一点,你可以把它们的大小当作unsigned long:
printf("%lu,%lu", (unsigned long)sizeof c, (unsigned long)sizeof(int));
https://stackoverflow.com/questions/2930687
复制相似问题