cstring format 예제

기본 할당자는 C 런타임 힙의 realloc 함수를 사용합니다. 반환 된 문자열을 해제하려면 free (문자열)를 호출해야합니다. 다른 힙 또는 메모리 할당의 다른 수단을 사용하는 사용자 고유의 할당을 작성할 수 있습니다. 한 가지 예는 아래를 참조하십시오. 여기서 장점은 버퍼가 서식이 지정된 데이터를 보유할 만큼 충분히 큰지 여부에 대해 걱정할 필요가 없다는 것입니다. 이것은 서식 루틴에 의해 처리됩니다. 변수 인수 목록이 있는 다른 함수를 만들고 FormatString을 호출하는 데 사용할 수 있습니다. 예를 들어 메시지를 포맷할 수 있는 MessageBox 함수를 만들어 보겠습니다: 매우 일반적인 작업은 CString 값을 컨트롤(예: CTreeCtrl)에 전달하는 것입니다. MFC는 작업에 대한 편리한 오버로드의 번호를 제공하지만, 가장 일반적인 상황에서당신은 업데이트의 “원시”형태를 사용하고, 따라서 당신은 TVINSERTITEMSTRUCT에 포함 된 TVITEM에 문자열에 대한 포인터를 저장해야합니다 : 함수는 pszFormat에 의해 결정된 입력으로 메시지 정의가 필요합니다.

이 함수는 서식이 지정된 메시지 텍스트와 가변 인수 목록을 CStringT 개체에 복사하여 요청시 포함된 삽입 시퀀스를 처리합니다. 사용 가능한 printf 형식 지정에 대한 간략한 요약은 다음과 같습니다: 두 개 이상의 대체가 있는 경우 대체의 단어 순서가 중요하지 않은 경우(예: 제목-개체, 제목-동사 또는 동사-object)가 중요하지 않은지 확인해야 합니다. 영어. Windows의 OLE 할당 기능에 대한 자세한 내용은 Windows SDK의 SysAllocString을 참조하십시오. 세 개의 8자 열에서 세 정수에 대해 %8d%8d%8d와 같은 형식과 같이 필드 너비만 사용하여 표에 따라 많은 수가 발생하는 경우 필드 분리가 유지되지 않습니다. 필드 분리가 손실되어 출력이 손상될 수 있습니다. 스크립트의 구성 요소로 프로그램을 사용하도록 권장하는 시스템에서는 원래 프로그래머가 출력을 사람의 눈으로만 읽을 수 있는지 여부에 관계없이 이러한 손상된 데이터를 전달하여 추가 처리를 손상시킬 수 있습니다. 이러한 문제는 모든 테이블 형식 출력 형식에 명시적 구분 기호, 심지어 공백을 포함하여 제거할 수 있습니다. 이전예제를 %7d %7d %7d로 변경하기만 하면 숫자가 커질 때까지 동일한 서식을 지정하지만 명시적으로 포함된 공백으로 인해 출력에 병합되는 것을 명시적으로 방지할 수 있습니다. 문자열 데이터에도 유사한 전략이 적용됩니다. 컨트롤에 저장된 값과 같은 데이터를 검색하려고 할 때 약간 다른 방법이 필요합니다.

예를 들어 GetItem 메서드를 사용하는 CTreeCtrl의 경우 여기서는 항목의 텍스트를 얻으려고 합니다. 텍스트의 크기가 MY_LIMIT에 지나지 않는다는 것을 알고 있습니다. 따라서 CString의 매우 편리한 기능 중 하나는 두 개의 문자열을 통합 할 수있는 기능과 같은 것을 쓸 수 있습니다. 예를 들어 서식 사용이 문자열이 아닌 데이터 형식에서 CString으로 변환하는 가장 일반적인 방법인 경우(예: 정수를 CString으로 변환하는 경우: 다음 문자 시퀀스는 printf 형식 지정자로 사용될 때 특별한 의미를 갖습니다. 일반 텍스트 함수 _tcscoll, TCHAR에 정의 되어 있습니다. H, 컴파일 타임에 정의된 문자 집합에 따라 strcoll, wcscoll 또는 _mbscoll에 매핑됩니다.