正确使用具有固定大小类型的scanf / printf(和系列)的方法?

时间:2012-10-17 14:37:53

标签: c printf scanf fixed-size-types

阅读this SO question,我开始想知道 - 使用固定大小类型的scanf / printf(和系列)的正确方法是什么?

例如,如果我有short intint,我会分别使用%hd%d - 很好。

但是如果我有int16_t怎么办? short int可能与int16_t不同,它与平台有关。任何其他固定大小(整数)类型都一样吗?


注意: 因为看起来我收到了一些下选票,因为我“没有试图谷歌这个”,它看起来我需要解释一下:我在这里没有看到类似的问题,这就是我发布它的原因。 SO中的大部分问题都可以通过谷歌回答,而不是在这里问。这将使StackOverflow不再是现在的地方。

不,我没有这样做是为了声誉 - 我今天已经达到每日声望上限(在发布此问题之前有24票)。

我的观点是 - 我认为这不值得投票。

2 个答案:

答案 0 :(得分:15)

正确的方法是使用inttypes.hprintf系列和scanf系列定义标准宏,例如

printf ("%" PRId16, short_int);
scanf ("%" SCNd16, &short_int);

答案 1 :(得分:4)

inttypes.h头文件包含定义stdint.h中定义的固定宽度整数的正确格式说明符的宏。例如,printf()int16_t的类型说明符是名为PRId16的宏。例如:

int16_t x;
scanf("%" SCNd16, &x);

printf("You have entered: %" PRId16 "\n", x);