C + + 문자열 리터럴

"문자열 리터럴"은 큰따옴표(" ")로 묶인 소스 문자 집합의 0개 이상의 문자로 구성됩니다.문자열 리터럴은 함께 사용되어 null로 끝나는 문자열을 형성하는 문자 시퀀스를 나타냅니다.

문자열 리터럴은 큰따옴표("), 역슬래시(\) 또는 줄 바꿈 문자를 제외한 소스 문자 세트의 그래픽 문자를 포함할 수 있습니다.여기에는 C + +의 문자 상수에 설명된 것과 같은 이스케이프 시퀀스가 포함될 수 있습니다.

C++ 문자열에는 다음과 같은 형식이 있습니다.

  • char[n]의 배열. 여기서 n은 문자열 길이(문자 수)에 문자열 끝을 표시하는 종료 '\0**'**으로 1을 더합니다.

  • 와이드 문자열에 대한 wchar_t의 배열

문자열 상수 수정 결과는 정의되지 않습니다.예를 들면 다음과 같습니다.

char *szStr = "1234";
szStr[2] = 'A';      // Results undefined

Microsoft 전용

경우에 따라 동일한 문자열 리터럴이 실행 가능한 파일에서 공백을 저장하도록 "풀링"될 수 있습니다.문자열-리터럴 풀링에서 컴파일러는 특정 문자열 리터럴에 대한 각 참조가 문자열 리터럴의 별도 인스턴스를 가리키는 것이 아니라 특정 문자열 리터럴에 대한 모든 참조가 메모리의 같은 위치를 가리키도록 합니다./GF는 문자열 풀링을 사용할 수 있게 합니다.

END Microsoft 전용

문자열 리터럴을 지정할 때 인접 문자열을 연결합니다.따라서 이 선언은

char szStr[] = "12" "34";

이 선언과 동일합니다.

char szStr[] = "1234";

인접한 문자열의 이러한 연결로 여러 줄의 긴 문자열을 쉽게 지정할 수 있습니다.

cout << "Four score and seven years "
        "ago, our forefathers brought forth "
        "upon this continent a new nation.";

위 예제에서 전체 문자열인 Four score and seven years ago, our forefathers brought forth upon this continent a new nation.이 함께 스플라이스됩니다.또한 이 문자열은 다음과 같이 줄 결합을 사용하여 지정할 수 있습니다.

cout << "Four score and seven years \
ago, our forefathers brought forth \
upon this continent a new nation.";

상수의 모든 인접 문자열이 연결된 후에 NULL 문자인 '\0'이 추가되어 C 문자열 처리 함수에 대해 문자열 끝 표시를 제공합니다.

첫 번째 문자열에 이스케이프 문자가 포함되어 있으면 문자열 연결에 놀라운 결과를 얻을 수 있습니다.다음 두 가지 선언을 참조하십시오.

char szStr1[] = "\01" "23";
char szStr2[] = "\0123";

szStr1 및 szStr2에 같은 값이 포함되어 있다고 가정하는 것이 당연하지만 실제로 들어 있는 값은 다음 그림과 같습니다.

이스케이프 및 문자열 연결

이스케이프 및 문자열 연결

Microsoft 전용

문자열 리터럴의 최대 길이는 16,384(16K)바이트입니다.이 제한은 charwchar_t 문자열 형식에 적용됩니다.문자열 리터럴이 큰따옴표로 묶인 부분으로 이루어진 경우 전처리기는 해당 부분을 단일 문자열로 연결하고, 연결된 각 줄에 대해 총 바이트 수에 바이트를 추가합니다.

예를 들어, 문자열이 줄당 50자(2,000자)인 40줄로 구성되어 있으며 한 줄에 7자가 있고 각 줄은 큰따옴표로 둘러싸여 있다고 가정합니다.이것은 총 2,008 바이트에 대하여 2,007 바이트와 종료하는 0 문자를 위한 1 바이트를 더합니다.연결 시 추가 문자가 각각의 첫 40줄에 대한 총 바이트 수에 추가됩니다.그러면 총 2,048바이트가 만들어집니다.(추가 문자는 최종 문자열에 기록되지 않습니다.) 그러나 줄 연속 문자(\)가 큰따옴표 대신 사용되는 경우 전처리기는 각 줄에 대한 추가 문자를 추가하지 않습니다.

END Microsoft 전용

문자 수를 계산하고 종료 '\0'의 경우 1 또는 형식 wchar_t의 경우 2를 추가하여 문자 개체의 크기를 결정합니다.

큰 따옴표(")로 문자열을 묶기 때문에 이스케이프 시퀀스(\")를 사용하여 묶은 큰 따옴표를 나타냅니다.단일 인용 부호(')는 이스케이프 시퀀스 없이 나타낼 수 있습니다.백슬래시 문자(\)는 줄의 끝에 위치하면 줄 연속 문자가 됩니다.백슬래시 문자가 문자열 내에 나타나도록 하려면 두 개의 백슬래시(\\)를 입력해야 합니다.(줄 연속에 대한 자세한 내용은 번역 단계전처리기 참조를 참조하십시오.)

넓은 문자 형식의 문자열을 명시하려면, (wchar_t[]), 문자 L를 가지고 열린 큰 따옴표에서 선행해야 합니다.예를 들면 다음과 같습니다.

wchar_t wszStr[] = L"1a1g";

문자 상수에 나열된 모든 일반 이스케이프 코드가 문자열 상수에서 유효합니다.예를 들면 다음과 같습니다.

cout << "First line\nSecond line";
cout << "Error! Take corrective action\a";

이스케이프 코드는 16진수가 아닌 첫 번째 문자에서 종료되므로 포함된 16진수 이스케이프 코드가 있는 문자열 상수의 사양은 예기치 않은 결과를 초래할 수 있습니다.다음 예제에서는 ASCII 문자 뒤에 문자 five을 포함하는 문자열 리터럴을 생성합니다.

"\x05five"

실제 결과는 16진법 5F이며 이는 ive 문자 뒤에 오는 언더스코어에 대한 ASCII 코드입니다.다음 예제는 원하는 결과를 생성합니다.

"\005five"     // Use octal constant.
"\x05" "five"  // Use string splicing.

참고 항목

참조

C + + 리터럴