수색…


비고

C ++ 언어는 문자셋을 지정하지 않으며, 일부 컴파일러는 UTF-8 또는 UTF-16의 사용을 지원할 수 있습니다. 그러나 간단한 ANSI / ASCII 문자를 넘어선 어떤 것이 제공 될지는 확실치 않습니다.

따라서 모든 국제 언어 지원은 구현 정의, 사용중인 플랫폼, 운영 체제 및 컴파일러에 의존합니다.

플랫폼의 국제 지원을 확장하는 데 사용할 수있는 여러 제 3 자 라이브러리 (예 : 국제 유니 코드위원회 라이브러리).

C ++ 문자열 특성 이해

#include <iostream>
#include <string>

int main()
{
    const char * C_String = "This is a line of text w";
    const char * C_Problem_String = "This is a line of text ኚ";
    std::string Std_String("This is a second line of text w");
    std::string Std_Problem_String("This is a second line of ϯϵxϯ ኚ");

    std::cout << "String Length: " << Std_String.length() << '\n';
    std::cout << "String Length: " << Std_Problem_String.length() << '\n';

    std::cout << "CString Length: " << strlen(C_String) << '\n';
    std::cout << "CString Length: " << strlen(C_Problem_String) << '\n';
    return 0;
}

플랫폼 (윈도우, OSX 등) 및 컴파일러 (GCC, MSVC 등)에 따라이 프로그램 은 컴파일되지 않거나 다른 값을 표시하거나 동일한 값을 표시하지 못할 수 있습니다 .

Microsoft MSVC 컴파일러에서 예제 출력 :

문자열 길이 : 31
문자열 길이 : 31
CString 길이 : 24
CString 길이 : 24

이것은 MSVC에서 사용 된 확장 문자 각각이 단일 "문자"로 간주되며이 플랫폼이 국제화 된 언어를 완벽하게 지원함을 보여줍니다.
그러나이 동작은 드문 경우이지만 이러한 국제 문자는 내부적으로 유니 코드로 저장되므로 실제로 여러 바이트 길이입니다. 예기치 않은 오류가 발생할 수 있습니다.

GNC / GCC 컴파일러에서 프로그램 출력은 다음과 같습니다.

문자열 길이 : 31
문자열 길이 : 36
CString 길이 : 24
CString 길이 : 26

이 예는 이러한 확장-문자를 지원하지 않습니다이 (리눅스) 플랫폼에 사용되는 GCC 컴파일러는, 또한 사용하는 반면 (제대로) 몇 바이트 개별 문자를 저장하는 것을 보여줍니다.
이 경우 유니 코드 문자의 사용이 가능하지만 프로그래머는이 시나리오에서 "문자열"의 길이가 읽을 수있는 문자길이가 아니라 바이트 단위길이 임을 기억해야합니다.

이러한 차이점은 국제 언어가 플랫폼별로 처리되는 방법에 기인합니다. 더 중요한 것은이 예제에서 사용 된 C 및 C ++ 문자열 은 바이트 배열 로 간주 될 수 있으므로 C ++ 언어는 문자 (char)는 1 바이트가 된다



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow