C中_int8数据类型的格式说明符

时间:2012-10-24 15:52:54

标签: c integer overflow

_int8数据类型的格式说明符是什么?

我正在使用“%hd”,但它给我一个关于堆栈损坏的错误。谢谢:))

这是代码的片段:

signed _int8 answer;

printf("----Technology Quiz----\n\n");
printf("The IPad came out in which year?\n");
printf("Year: ");
scanf("%hd", &answer);
printf("\n\n");
printf("The answer you provided was: %hd\n\n", answer);

4 个答案:

答案 0 :(得分:4)

man scanf:%hhd“...但下一个指针是指向已签名的char或unsigned char的指针”。 _int8相当于您将要进行signed char的任何系统中的scanf

signed _int8 answer;
scanf("%hhd", &answer);
printf("You entered %d\n\n", answer);

答案 1 :(得分:3)

要在int8_tuint_fast16_t的格式字符串中以C99方式使用printfscanf等“显式宽度”类型定义,您需要{{1}然后使用字符串宏#include <inttypes.h>PRIi8,如下所示:

PRIuFAST16

请参阅the manual获取完整列表,并将其与<stdint.h>中的typedef交叉引用。

答案 2 :(得分:0)

%hd将允许你得到一个&#34; short int&#34;,它通常是16位,而不是像想象的那样8位。如果不支持%hhd,除了作为简短和分配扫描之外,你可能没有办法做到这一点。

答案 3 :(得分:0)

带有%hd的scanf读取一个短整数,在32位计算机上可能是16位。因此,您正在阅读答案并超出一个字节,因此堆栈损坏。

直到C90,没有类型说明符可以用scanf读取8位int。

%hhd仅在C99之后可用,另请参阅ANSI C (ISO C90): Can scanf read/accept an unsigned char?

相关问题