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

Kir*_*rov 15 c printf scanf fixed-size-types

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

举例来说,如果我有short int或者int,我会使用%hd,并%d分别-罚款.

但如果我有int16_t什么?short int可能与之不同int16_t,它取决于平台.任何其他固定尺寸(整体)类型都一样吗?


注意:因为看起来我收到了一些向下投票,因为我"没有尝试谷歌这个 ",看起来我需要解释:我没有在这里看到类似的问题,这就是我发布它的原因.SO中的大部分问题都可以通过谷歌回答,而不是在这里问.那将使StackOverflow成为现实,它实际上就是现在.

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

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

Ste*_*e-o 15

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

printf ("%" PRId16, short_int);
scanf ("%" SCNd16, &short_int);
Run Code Online (Sandbox Code Playgroud)


小智 5

所述inttypes.h头文件包含用于定义在stdint.h定义的固定宽度的整数正确的格式说明的宏。例如,对于类型说明符printf()int16_t一个名为宏PRId16。例子:

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

printf("You have entered: %" PRId16 "\n", x);
Run Code Online (Sandbox Code Playgroud)