C/C++ 문자 크기('a')
C와 C++의 문자 사이즈는?C와 C++의 문자 사이즈는 모두 1바이트인 것으로 알고 있습니다.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
놀랄 일도 아닙니다.둘 다 다음과 같은 출력을 제공합니다.Size of char : 1
이제 우리는 캐릭터가 다음과 같이 표현된다는 것을 알 수 있습니다.'a'
,'b'
,'c'
,'|'
그래서 위의 코드를 다음과 같이 수정했습니다.
C:
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Size of char : 1
Size of char : 4
C++의 경우:
#include <iostream>
int main()
{
char a = 'a';
std::cout << "Size of char : " << sizeof(a) << "\n";
std::cout << "Size of char : " << sizeof('a') << "\n";
return 0;
}
Size of char : 1
Size of char : 1
왜?sizeof('a')
C와 C++의 다른 값을 반환한다.
C에서 다음과 같은 문자 상수의 유형입니다.'a'
실제로는int
사이즈가 4(또는 다른 실장에 의존하는 값)인 경우.C++의 유형은 다음과 같습니다.char
(사이즈는 1).이것은 두 언어 사이의 많은 작은 차이 중 하나이다.
폴이 말했듯이, 그건'a'
는 입니다.int
C에서 a로char
C++로 표시됩니다.
C와 C++의 차이점에 대해서는 몇 년 전에 쓴 http://david.tribble.com/text/cdiffs.htm에서 다루었습니다.
C에서 문자 리터럴의 유형은 int이고 C++에서는 char입니다.이는 함수 오버로드를 지원하기 위해 필요한 C++ 형식입니다.다음의 예를 참조해 주세요.
void foo(char c)
{
puts("char");
}
void foo(int i)
{
puts("int");
}
int main()
{
foo('i');
return 0;
}
출력:
char
C 언어에서 문자 리터럴은char
type. C는 문자 리터럴을 정수로 간주합니다.그래서 이 두 가지 차이점이 있습니다.sizeof('a')
그리고.sizeof(1)
.
따라서 문자 리터럴의 크기는 C의 정수 크기와 동일합니다.
C++ 언어에서 문자 리터럴이란char
cpp reference는 다음과 같습니다.
1) 좁은 문자 리터럴 또는 보통 문자 리터럴(예: 또는 또는). 이러한 리터럴은 유형 및 실행 문자 집합의 c-char 표현과 동일한 값을 가집니다.c-char가 실행 문자 집합에서 단일 바이트로 나타낼 수 없는 경우 리터럴에는 type int 및 구현 정의 값이 있습니다.
그래서 C++에서 문자 리터럴은char
따라서 C++ 문자 리터럴의 크기는 1바이트입니다.
Alos, 프로그램에서 잘못된 형식 지정자를 사용했습니다.sizeof
교환입니다.
C11 § 7.21.6.1 (P9) :
변환 사양이 유효하지 않은 경우 동작은 정의되지 않습니다.275) 대응하는 변환 사양의 올바른 유형이 아닌 인수는 동작 정의되지 않습니다.
그래서, 너는 그것을 사용해야 한다.%zu
형식 지정자 대신%d
그렇지 않으면 C에서 정의되지 않은 동작입니다.
언급URL : https://stackoverflow.com/questions/2172943/size-of-character-a-in-c-c
'source' 카테고리의 다른 글
Vue js는 v-on 또는 @click을 사용하지 않고 클릭 이벤트를 추가합니다. (0) | 2022.08.21 |
---|---|
포인터가 C를 가리키고 있는 함수를 판별하고 있습니까? (0) | 2022.08.21 |
C/C++에서 typedefs에 #ifndef와 유사한 지시어가 있습니까? (0) | 2022.08.21 |
Vue 렌더링 기능 내에서 하위 제어 (0) | 2022.08.21 |
삭제된 하위 구성 요소에서 이벤트 수신 중지 (0) | 2022.08.21 |