1

_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

4 に答える 4

5

man scanf: %hhd"...しかし、次のポインターは、signed char または unsigned char へのポインターです". Anは、実行するシステム_int8の a と同等です。signed charscanf

signed _int8 answer;
scanf("%hhd", &answer);
printf("You entered %d\n\n", answer);
于 2012-10-24T15:57:09.270 に答える
3

およびのフォーマット文字列で C99 のint8_tおよびのような「明示的な幅」typedefをポータブルに使用するには、次のように文字列マクロおよびを使用する必要があります。uint_fast16_tprintfscanf#include <inttypes.h>PRIi8PRIuFAST16

#include <stdint.h>   // for the typedefs (redundant, actually)
#include <inttypes.h> // for the macros

int8_t a = 1;
uint_fast16_t b = 2;

printf("A = %" PRIi8 ", B = %" PRIuFAST16 "\n", a, b);

完全なリストについてはマニュアルを参照し、 の typedef と相互参照して<stdint.h>ください。

于 2012-10-24T16:23:24.980 に答える
0

%hd を使用すると、「short int」を取得できます。これは通常、8 ビットではなく 16 ビットです。%hhd がサポートされていない場合は、短いものとしてスキャンして割り当てる以外に、これを行う良い方法がない可能性があります。

于 2012-10-24T15:59:05.513 に答える
0

scanf with %hd reads a short int, which might be 16 bit on a 32 bit machine. So you are reading into answer and one byte beyond, thus the stack corruption.

Up to C90 there is no type specifier to read an 8 bit int with scanf.

%hhd is only available since C99, see also ANSI C (ISO C90): Can scanf read/accept an unsigned char?.

于 2012-10-24T16:03:17.687 に答える