阅读this SO question,我开始想知道 - 使用固定大小类型的scanf
/ printf
(和系列)的正确方法是什么?
例如,如果我有short int
或int
,我会分别使用%hd
和%d
- 很好。
但是如果我有int16_t
怎么办? short int
可能与int16_t
不同,它与平台有关。任何其他固定大小(整数)类型都一样吗?
注意: 因为看起来我收到了一些下选票,因为我“没有试图谷歌这个”,它看起来我需要解释一下:我在这里没有看到类似的问题,这就是我发布它的原因。 SO中的大部分问题都可以通过谷歌回答,而不是在这里问。这将使StackOverflow不再是现在的地方。
不,我没有这样做是为了声誉 - 我今天已经达到每日声望上限(在发布此问题之前有24票)。
我的观点是 - 我认为这不值得投票。
答案 0 :(得分:15)
正确的方法是使用inttypes.h
为printf
系列和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);