ANSI C(ISO C90):scanf可以读取/接受unsigned char吗?

时间:2010-02-09 17:29:09

标签: c gcc scanf c89

简单问题:scanf可以读取/接受“小整数”到ANSI C中的unsigned char吗?

示例代码un_char.c:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    unsigned char character;

    scanf("%hhu", &character);

    return EXIT_SUCCESS;
}

编译为:

$ gcc -Wall -ansi -pedantic -o un_char un_char.c
un_char.c: In function ‘main’:
un_char.c:8: warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier
ISO C90不支持

hh。那么在这种情况下可以使用什么scanf转换?

2 个答案:

答案 0 :(得分:11)

否:C89(C90)不支持'%hhu'将数字字符串读入无符号字符。这是C99中的一项功能。

您必须读入无符号整数('%u')或无符号短整数('%hu'),然后检查结果是否包含无符号字符的范围。

答案 1 :(得分:3)

将其读入unsigned short / int并在需要时进行一些范围检查。