2010-02-09 4 views
15

간단한 질문 : scanf가 ANSI C의 부호없는 문자에 "작은 정수"를 읽거나 받아 들일 수 있습니까?ANSI C (ISO C90) : scanf는 부호없는 char을 읽거나 받아 들일 수 있습니까?

$ 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 

hh는 ISO C90에 의해 지원되지 않습니다

예 코드 un_char.c는 :으로

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

int main(void) 
{ 
    unsigned char character; 

    scanf("%hhu", &character); 

    return EXIT_SUCCESS; 
} 

집계. 따라서이 상황에서 scanf 변환을 사용할 수 있습니까?

+0

Windows에서 코드를 작동시킬 필요가 없으면'-ansi'를'-std = c99'로 변경하십시오. – zwol

답변

3

부호없는 short/int로 읽고 필요한 경우 범위 검사를 수행하십시오.

+0

부호없는 short는 16 비트의 더 나은 데이터 타입이 될 것입니다. 상위 8 비트를 노크합니다. :) – t0mm13b

+1

@ tommieb75 : 'unsigned short'가 16 비트라는 보장은 없습니다. 'unsigned char '도 8 비트라는 보장은 없습니다. – jamesdlin

+0

@jamesdlin : 동의합니다 ... 다른 프로세서/컴파일러/링커/런타임 환경으로 인해 ... :) O : – t0mm13b

11

아니요 : C89 (C90)는 '%hhu'을 사용하여 부호없는 char에 숫자 문자열을 읽는 것을 지원하지 않습니다. 이것이 C99의 기능입니다.

부호없는 정수 ('%u') 또는 부호없는 short()로 읽은 다음 결과가 부호없는 char의 범위와 일치하는지 확인해야합니다.

관련 문제