부호 없는 short int 형식 지정자는 무엇입니까?
다음과 같은 프로그램이 있습니다.
#include <stdio.h>
int main(void)
{
unsigned short int length = 10;
printf("Enter length : ");
scanf("%u", &length);
printf("value is %u \n", length);
return 0;
}
다음 명령어를 사용하여 컴파일할 때gcc filename.c
(에서) 다음 경고를 발행했습니다.scanf()
회선)
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
그리고 나서,C99 specification - 7.19.6 Formatted input/output functions
길이 수식자를 사용할 때 올바른 형식 지정자를 이해하지 못했습니다(예:short
,long
등)와 함께unsigned
위해서int
data type 입니다.
이%u
올바른 지정자unsigned short int
만약 그렇다면 왜 위에 언급된 경고를 받게 되는 거죠?
편집: 대부분의 경우, 저는%uh
그리고 여전히 경고를 주고 있었다.
를 사용해 보세요."%h"
수식자:
scanf("%hu", &length);
^
ISO/IEC 9899:201x - 7.21.6.1-7
다음 d, i, o, u, x, X 또는n 변환 지정자가 short 또는 unsigned short 유형 포인터를 가진 인수에 적용되도록 지정합니다.
위해서scanf
, 를 사용해야 합니다.%hu
포인터를 전달하고 있기 때문에unsigned short
.위해서printf
에 합격하는 것은 불가능하다.unsigned short
디폴트 프로모션에 의해 (프로모션으로 승격됩니다.int
또는unsigned int
유무에 따라int
적어도 같은 수의 값 비트를 가지다unsigned short
그렇든 아니든)그렇게%d
또는%u
괜찮아요.자유롭게 사용하실 수 있습니다.%hu
그래도 괜찮으시다면요
Linux 매뉴얼 페이지에서 다음 작업을 수행합니다.
h 다음 정수 변환은 short int 인수 또는 unsigned short int 인수 또는 fol에 대응합니다.lowing n 변환은 짧은 int 인수에 대한 포인터에 해당합니다.
따라서 부호 없는 짧은 정수를 인쇄하려면 형식 문자열은 다음과 같아야 합니다."%hu"
.
여기 좋은 테이블이 있습니다printf
지정자.그러니까...%hu
위해서unsigned short int
.
Wikipedia "C data type"에도 링크합니다.
언급URL : https://stackoverflow.com/questions/8699812/what-is-the-format-specifier-for-unsigned-short-int
'programing' 카테고리의 다른 글
C 및 C++에서 세미콜론 대신 쉼표를 사용하는 효과 (0) | 2022.07.08 |
---|---|
헤더 파일의 출처를 어떻게 알 수 있습니까? (0) | 2022.07.08 |
Vue 저장소 디스패치 오류 응답이 UI로 전달되지 않음 (0) | 2022.07.08 |
Nuxt config 다이내믹 스타일시트 (0) | 2022.07.08 |
Maven 스냅샷이란 정확히 무엇이며 왜 필요한가? (0) | 2022.07.08 |