17

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

例如,如果我有short intor int,我会分别使用%hdand %d- 很好。

但如果我有int16_t呢?short int可能与 不同int16_t,它取决于平台。任何其他固定大小(整体)类型都一样吗?


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

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

我的观点是——我认为这不值得投反对票。

4

2 回答 2

17

正确的方法是使用which 为family 和familyinttypes.h定义标准宏,例如printfscanf

printf ("%" PRId16, short_int);
scanf ("%" SCNd16, &short_int);
于 2012-10-17T14:43:25.883 回答
5

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

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

printf("You have entered: %" PRId16 "\n", x);
于 2012-10-17T14:42:37.090 回答