23

このコードを使用して、0 から 255 までの値を読み取ろうとしています ( unsigned char)。

#include<stdio.h>
int main(void)
{
    unsigned char value;

    /* To read the numbers between 0 to 255 */
    printf("Please enter a number between 0 and 255 \n");
    scanf("%u",&value);
    printf("The value is %u \n",value);

    return 0;
}

予想どおり、次のコンパイラ警告が表示されます。

警告: フォーマット '%u' はタイプ 'unsigned int *' を想定していますが、引数 2 のタイプは 'unsigned char *' です

そして、これがこのプログラムの私の出力です。

0 から 255 までの数値を入力してください
45
値は 45 です
セグメンテーション違反

このコードの実行中にセグメンテーション違反が発生します。

unsigned charを使用して値を読み取る最良の方法は何scanfですか?

4

2 に答える 2

42

指定子は、それ%uを に読み込むときに未定義の動作を引き起こす整数を期待していunsigned charます。unsigned char指定子を使用する必要があります%hhu

于 2013-01-03T20:46:16.033 に答える