CString C 스타일 문자열과 관련된 작업

CString 개체에 문자열 데이터가 포함됩니다. CString는 문자열 데이터로 작업하기 위해 클래스 템플릿 CStringT 에 정의된 메서드 및 연산자 집합을 상속합니다. (CStringtypedef 지원되는 문자 데이터의 종류로 작업하는 것을 전문으로 CStringT 하는 CString 것입니다.)

CString은 문자 데이터를 C 스타일의 null로 종료되는 문자열로 저장하지 않습니다. 대신 CString은 필요한 데이터와 공간을 보다 안전하게 감시하기 위해 문자 데이터 길이를 추적합니다.

CString은 C 스타일 문자열을 허용하며 C 스타일 문자열로 문자 데이터에 액세스하는 방법을 제공합니다. 이 항목의 다음 섹션에서는 C 스타일의 null로 종료되는 문자열처럼 CString 개체를 사용하는 방법을 설명합니다.

C 스타일 Null로 종료된 문자열로 사용 CString

개체를 CString C 스타일 문자열로 사용하려면 개체를 .로 캐스팅합니다 LPCTSTR. 다음 예에서 CString은 C 스타일의 null로 종료되는 읽기 전용 문자열에 대한 포인터를 반환합니다. strcpy 함수는 C 스타일 문자열 복사본을 myString 변수에 포함합니다.

CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aCString);

CString 등의 SetAt 메서드를 사용하여 문자열 개체에서 개별 문자를 수정할 수 있습니다. 그러나 LPCTSTR 포인터는 일시적이고 변경 CString내용이 있을 때 유효하지 않습니다. CString이 범위를 벗어나 자동으로 삭제될 수도 있습니다. 개체를 사용할 때마다 개체의 새 LPCTSTR 포인터를 CString 가져오는 것이 좋습니다.

CString 데이터의 복사본을 직접 수정해야 할 수도 있습니다. strcpy_s 개체를 별도의 버퍼에 복사하려면 보다 안전한 _tcscpy_s 함수 또는 유니코드/MBCS 이식 가능 CString를 사용합니다. 이렇게 하면 다음 예에 나와 있는 것처럼 문자를 안전하게 수정할 수 있습니다.

CString theString(_T("This is a test"));
int sizeOfString = (theString.GetLength() + 1);
LPTSTR lpsz = new TCHAR[sizeOfString];
_tcscpy_s(lpsz, sizeOfString, theString);
//... modify lpsz as much as you want   

참고 항목

(또는 유니코드/MBCS 이식 가능_tcscpy_s)에 대한 strcpy_s 세 번째 인수는 (유니코드) 또는 const char* (ANSI)입니다 const wchar_t* . 위의 예에서는 이 인수에 대해 CString을 전달합니다. C++ 컴파일러는 CStringCString로 변환하는 LPCTSTR 클래스에 대해 정의된 변환 함수를 자동으로 적용합니다. C++의 가장 유용한 기능 중 하나는 형식 간의 캐스팅 작업을 정의하는 기능입니다.

표준 런타임 라이브러리 문자열 함수 작업

CString 또는 유니코드/MBCS 이식 가능 strcmp와 같은 표준 C 런타임 라이브러리 문자열 함수를 사용할 수 있는 모든 문자열 작업을 수행하는 _tcscmp 메서드를 찾을 수 있습니다.

C 런타임 문자열 함수를 사용해야 하는 경우 C 스타일 null로 끝나는 문자열로 사용 CString 에서 설명하는 기술을 사용할 수 있습니다. CString 개체를 해당하는 C 스타일 문자열 버퍼에 복사하고 버퍼에 대해 작업을 수행한 다음 결과로 생성된 C 스타일 문자열을 CString 개체에 다시 할당할 수 있습니다.

CString 콘텐츠 직접 수정

대부분의 경우에는 CString 멤버 함수를 사용하여 CString 개체의 콘텐츠를 수정하거나 CString을 C 스타일 문자열로 변환해야 합니다.

그러나 문자 버퍼가 필요한 운영 체제 함수를 사용하는 등의 경우에는 CString 콘텐츠를 직접 수정할 수 있습니다.

GetBufferReleaseBuffer 메서드를 통해 CString 개체의 내부 문자 버퍼에 액세스하여 해당 버퍼를 직접 수정할 수 있습니다. 다음 단계에서는 이러한 작업을 위해 해당 함수를 사용하는 방법을 보여줍니다.

개체의 CString 내부 문자 버퍼를 사용하고 GetBufferReleaseBuffer 액세스하려면

  1. GetBuffer 개체에 대해 CString를 호출하고 필요한 버퍼 길이를 지정합니다.

  2. GetBuffer에서 반환하는 포인터를 사용하여 CString 개체에 문자를 직접 씁니다.

  3. ReleaseBuffer 개체에 대해 CString를 호출하여 문자열 길이 등의 모든 내부 CString 상태 정보를 업데이트합니다. CString 개체의 콘텐츠를 직접 수정한 후에는 ReleaseBuffer를 호출한 후에 다른 CString 멤버 함수를 호출해야 합니다.

변수 인수 함수와 함께 개체 사용 CString

일부 C 함수는 가변 인수 수를 사용합니다. 이러한 함수의 대표적인 예로 printf_s가 있습니다. 이러한 종류의 함수가 선언되는 방식으로 인해 컴파일러는 인수의 형식을 명확하게 파악할 수 없으며 각 인수에 대해 수행할 변환 작업을 결정할 수 없습니다. 따라서 가변 인수 수를 사용하는 함수로 CString 개체를 전달할 때는 명시적 형식 캐스팅을 사용해야 합니다.

변수 인수 함수에서 개체를 사용 CString 하려면 다음 예제와 같이 명시적으로 문자열로 캐스팅 LPCTSTRCString 합니다.

CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);    

CString 공식 매개 변수 지정

문자열 인수가 필요한 대부분의 함수에서는 함수 프로토타입의 정식 매개 변수를 const 대신 문자에 대한 LPCTSTR 포인터(CString)로 지정하는 것이 가장 좋습니다. 정식 매개 변수가 문자에 대한 포인터로 const 지정되면 배열, 리터럴 문자열 ["hi there"]에 대한 포인터 TCHAR 또는 개체를 CString 전달할 수 있습니다. 개체가 CString 자동으로 .로 LPCTSTR변환됩니다. 사용할 수 있는 모든 위치에서 개체를 LPCTSTRCString 사용할 수도 있습니다.

인수를 수정하지 않을 경우 정식 매개 변수를 상수 문자열 참조(즉, const CString&)로 지정할 수도 있습니다. 함수에서 const 문자열을 수정할 경우 한정자를 삭제합니다. 기본 null 값을 사용하려면 아래에 나와 있는 것처럼 정식 매개 변수를 null 문자열 [""]로 초기화합니다.

void AddCustomer(const CString& name, const CString& address, 
   const CString& comment = _T(""));

대부분의 함수 결과에 대해 값을 기준으로 CString 개체를 반환할 수 있습니다.

참고 항목

문자열(ATL/MFC)
CString 인수 전달