플랫폼 독립적 인 size_t 형식 지정자 c?
size_t
C에서 유형의 변수를 인쇄하고 싶지만 size_t
다른 아키텍처에서 다른 변수 유형으로 별칭이 지정된 것처럼 보입니다 . 예를 들어 한 시스템 (64 비트)에서 다음 코드는 경고를 표시하지 않습니다.
size_t size = 1;
printf("the size is %ld", size);
하지만 내 다른 컴퓨터 (32 비트)에서 위 코드는 다음과 같은 경고 메시지를 생성합니다.
경고 : '% ld'형식에는 'long int *'유형이 필요하지만 인수 3에는 'size_t *'유형이 있습니다.
이것이 포인터 크기의 차이 때문이라고 생각하므로 64 비트 컴퓨터 size_t
에서는 long int
( "%ld"
)로 별칭이 지정되고 32 비트 컴퓨터 size_t
에서는 다른 형식으로 별칭이 지정됩니다.
특별히 형식 지정자가 size_t
있습니까?
예 : z
길이 수정자를 사용합니다 .
size_t size = sizeof(char);
printf("the size is %zu\n", size); // decimal size_t ("u" for unsigned)
printf("the size is %zx\n", size); // hex size_t
사용 가능한 다른 길이 수정자는 hh
(for char
), h
(for short
), l
(for long
), ll
(for long long
), j
(for intmax_t
), t
(for ptrdiff_t
) 및 L
(for long double
)입니다. C99 표준의 §7.19.6.1 (7)을 참조하십시오.
네, 있습니다. 그것은이다 %zu
(ANSI C99에 지정된대로).
size_t size = 1;
printf("the size is %zu", size);
참고 size_t
따라서, 서명되지는 %ld
길이의 잘못 수정 및 잘못된 형식 변환 지정자 : 두 번 잘못입니다. 궁금한 점이 있다면 %zd
for ssize_t
(서명)입니다.
MSDN 은 Visual Studio가 32 비트 및 64 비트 플랫폼에서 이식 가능한 코드에 대해 "I"접두사를 지원한다고 말합니다.
size_t size = 10;
printf("size is %Iu", size);
참고 URL : https://stackoverflow.com/questions/2125845/platform-independent-size-t-format-specifiers-in-c
'Programing' 카테고리의 다른 글
Visual Studio Code-현재 단어 선택 (이전 Visual Studio 바인딩의 Ctrl-w)? (0) | 2020.10.19 |
---|---|
"docker 빌드"중에 Docker 이미지의 / etc / hosts 파일을 업데이트하는 방법 (0) | 2020.10.19 |
HTML로 전화를 걸기 위해 iPhone 또는 Android 전화에서 전화 번호를 클릭 할 수있는 방법이 있습니까? (0) | 2020.10.19 |
Xcode의 iPad 옵션 대상 (0) | 2020.10.19 |
Bash : 함수를 매개 변수로 전달 (0) | 2020.10.19 |