2012-09-20 1 views
18

문자열 리터럴의 데이터 유형에 대해 혼란스러워합니다. const char * 또는 const char입니까? 통찰력을 높이 평가합니다. 감사합니다C++ 문자열 리터럴의 데이터 유형은 무엇입니까?

+0

내 대답보기 http://stackoverflow.com/questions/12451496/what-is-the-data-type-for-a-string/12452097#12452097 비슷한 질문. – PiotrNycz

+11

이 잘못 (const char *를 생각하는) 사람들의 수에 따라 판단한 이유는 이것이 왜 투표에 실패했는지 알지 못합니다. 응답자의 절반이 답을 모를 때 좋은 질문입니다. – WhozCraig

+5

@CraigNelson, 나는 지난 10 년 동안 10 명 이상의 담당자가있는 너무 많은 사람들이 잘못 이해하는 것을 보았습니다. – chris

답변

25

그것은 N이 (가) 문자열의 길이를 더한 종료 NUL 하나 (또는 ​​문자열의 길이 만하면 "의 길이를 정의하는 경우입니다 (같은 일 char const[N]인)을 const char[N]입니다 문자열 "은 이미 NUL을 포함하고 있습니다.

이렇게하면 sizeof("hello") - 1을 사용하여 문자열의 문자 수를 가져올 수 있습니다 (포함 된 문자 포함 : NUL). 그것이 포인터 인 경우 시스템의 포인터 크기 (1을 뺀)가 항상 크기 때문에 작동하지 않습니다.

+6

좁은 문자열 리터럴 형식은 "배열의 n const char"입니다. 여기서 n은 아래 정의 된 문자열의 크기이고 정적 저장 기간 (3.7)입니다. * – chris

+1

댓글 작성자의 관심사 ? –

+0

아니요. 서사시적인 모습을보고 난 후이 질문에 대해 자유롭게 투표를 표했습니다. 답은, 다른 이야기입니다. =) – WhozCraig

7

"Hello world"const char[12] (11 문자 + '\0' 터미네이터)입니다.

L"Hello world"const wchar_t[12]입니다.

그리고 C++ 14 이후, "Hello world"sstd::string입니다.

또한 각각, UTF-8, UTF-16, UTF-32 인코딩을 지정 C++ (11)에 의해 추가 u8"", u""U"" 캐릭터 문자 표기를 참고. 규정되지 않은 문자열 리터럴 (즉, ""L"")의 인코딩은 구현 정의되어 있습니다.