Tag: 格式说明符

独立于平台的size_t c中的格式说明符

我想用C打印出一个size_ttypes的variables,但是看起来size_t在别的体系结构上被别名为不同的variablestypes。 例如,在一台机器上(64位),以下代码不会引发任何警告: size_t size = 1; printf("the size is %ld", size); 但在我的其他机器(32位)上面的代码产生以下警告消息: 警告:格式'%ld'需要input'long int *',但参数3的types是'size_t *' 我怀疑这是由于指针大小的差异,所以在我的64位机器size_t被别名为long int ( "%ld" ),而在我的32位机器size_t别名为另一种types。 是否有一个格式说明符专门为size_t ?

为什么printf只有一个参数(没有转换说明符)不推荐使用?

在我正在阅读的一本书中,写了带有一个参数(不带转换说明符)的printf被弃用。 它build议替代 printf("Hello World!"); 同 puts("Hello World!"); 要么 printf("%s", "Hello World!"); 有人可以告诉我为什么printf("Hello World!"); 是错的? 它是写在书中,它包含漏洞。 这些漏洞是什么?

如何在C中打印“unsigned long”?

我永远不能理解如何在C中打印unsigned long数据types 假设unsigned_foo是一个unsigned long ,那么我试试: printf("%lu\n", unsigned_foo) printf("%du\n", unsigned_foo) printf("%ud\n", unsigned_foo) printf("%ll\n", unsigned_foo) printf("%ld\n", unsigned_foo) printf("%dl\n", unsigned_foo) 而他们都打印某种-123123123号码,而不是unsigned long ,我有。

在printf中修正double的格式说明符

printf中double的正确格式说明符是什么? 是%f还是%lf ? 我相信它的%f但我不确定。 代码示例 #include <stdio.h> int main() { double d =1.4; printf("%lf", d); //is this wrong? }

h和hh修饰符用于printf的目的是什么?

除了%hn和%hhn (其中h或hh指定指向对象的大小), printf格式说明符的h和hh修饰符有什么意义? 由于标准要求的可变参数函数的默认升级,不可能将char或shorttypes的参数(或其任何有符号/无符号变体)传递给printf 。 根据7.19.6.1(7), h修饰符: 指定后面的d,i,o,u,x或X转换规则适用于short int或unsigned short int参数(参数将根据整数提升进行提升,但其值将转换为short int或打印之前无符号短整型); 或者一个下面的n转换规范适用于一个短int参数的指针。 如果参数实际上是shorttypes或unsigned shorttypes,那么将int提升为int ,然后将其转换为short或unsigned short将会产生与提升为int相同的值 ,而不会返回任何转换。 因此,对于types为short或unsigned short , %d , %u等应该给%hd , %hu等等(对于chartypes和hh同样)。 据我所知, h或hh修饰符可能有用的唯一情况是当参数在short或unsigned short范围外传递一个int ,例如 printf("%hu", 0x10000); 但我的理解是,传递这样的错误types会导致不确定的行为,所以你不能期望它打印0。 我见过的一个真实世界的例子是这样的代码: char c = 0xf0; printf("%hhx", c); 尽pipe实现了一个简单的chartypes(在这种情况下, printf("%x", c)会打印fffffff0或类似的东西),作者期望它打印f0 。 但是这个期望值得吗? (注意:原来的types是char ,它被提升为int并被转换回unsigned char而不是char ,从而改变了被打印的值。但是标准是否指定了这个行为,或者它是一个实现细节破碎的软件可能依靠?)

我应该如何打印types如off_t和size_t?

我试图打印像off_t和size_ttypes。 什么是可移植的 printf()的正确占位符? 还是有一个完全不同的方式来打印这些variables?

你如何printf一个无符号的long long int(unsigned long long int的格式说明符)?

#include <stdio.h> int main() { unsigned long long int num = 285212672; //FYI: fits in 29 bits int normalInt = 5; printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt); return 0; } 输出: My number is 8 bytes wide and its value is 285212672l. […]

格式化IO函数(* printf / * scanf)中的转换说明符%i和%d有什么区别?

在printf用作格式说明符时, %d和%i之间有什么区别?