문자열 리터럴의 데이터 유형에 대해 혼란스러워합니다. const char *
또는 const char
입니까? 통찰력을 높이 평가합니다. 감사합니다C++ 문자열 리터럴의 데이터 유형은 무엇입니까?
18
A
답변
25
그것은 N
이 (가) 문자열의 길이를 더한 종료 NUL
하나 (또는 문자열의 길이 만하면 "의 길이를 정의하는 경우입니다 (같은 일 char const[N]
로인)을 const char[N]
입니다 문자열 "은 이미 NUL
을 포함하고 있습니다.
이렇게하면 sizeof("hello") - 1
을 사용하여 문자열의 문자 수를 가져올 수 있습니다 (포함 된 문자 포함 : NUL
). 그것이 포인터 인 경우 시스템의 포인터 크기 (1을 뺀)가 항상 크기 때문에 작동하지 않습니다.
7
"Hello world"
은 const char[12]
(11 문자 + '\0'
터미네이터)입니다.
L"Hello world"
은 const wchar_t[12]
입니다.
그리고 C++ 14 이후, "Hello world"s
은 std::string
입니다.
또한 각각, UTF-8, UTF-16, UTF-32 인코딩을 지정 C++ (11)에 의해 추가 u8""
, u""
및 U""
캐릭터 문자 표기를 참고. 규정되지 않은 문자열 리터럴 (즉, ""
및 L""
)의 인코딩은 구현 정의되어 있습니다.
내 대답보기 http://stackoverflow.com/questions/12451496/what-is-the-data-type-for-a-string/12452097#12452097 비슷한 질문. – PiotrNycz
이 잘못 (const char *를 생각하는) 사람들의 수에 따라 판단한 이유는 이것이 왜 투표에 실패했는지 알지 못합니다. 응답자의 절반이 답을 모를 때 좋은 질문입니다. – WhozCraig
@CraigNelson, 나는 지난 10 년 동안 10 명 이상의 담당자가있는 너무 많은 사람들이 잘못 이해하는 것을 보았습니다. – chris