如何根据long的大小更改我的sprintf格式字符串

时间:2014-09-11 07:44:34

标签: c printf format-string

我想从带有uint64_tprintf的十六进制字符串中读取一些scanf值。

并非我使用的所有平台都具有相同的longlong long大小,因此,如果我使用类似"%llx"的格式字符串,则会在长长的平台上发出警告128位和"%lx"将在长长度为64位(长度较小)的平台上发出警告。

我的第一个想法是用宏定义格式字符串,但宏表达式不支持sizeof。

有没有办法定义我的格式字符串,以便它可以在任何平台上运行,最好没有警告?

1 个答案:

答案 0 :(得分:5)

uint64_t的格式字符串由宏PRIu64

定义

例如:

uint64_t foo = 0;

printf("%" PRIu64 "\n", foo);

scanf存在类似的格式字符串,在本例中为SCNu64。这些是<inttypes.h>中定义的宏。