본문 바로가기

# IT, Computer Science/C , C++

sprintf, format에서의 %s, %S의 차이점

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

sprintf와 MFC에서 CString의 맴버함수의  Format에서  사용하는 %s와 %S는 차이점이 있다.

 
간단한 예로 MFC에서

char cText[256]; // <--- 여기에 문자열 데이터가 있다고 치자
CString strText;
strText.Format("%s", cText);

로 할 경우 CString의 strText에 char의 cText의 문자열이
VS6에서는 들어가지만 VS2005 이상에서는 깨져서 들어가게 된다.

이럴 경우
strText.Format("%s", cText); 이 아닌
strText.Format("%S", cText); 를 하면되는데... 


%s에서의 대문자와 소문자의 차이점은 

%s는 target과 같은 type (target이 ANSI라면 ANSI, WIDE라면 WIDE) 에 사용하고,
%S는 다른 type (ANSI <-> WIDE) 일 때 사용하는것이기 때문이다.

위에서 char는 ANSI이고 CString은 UNICODE이므로 대문자 %S를 써야 한다는 것이다.
오래된 VS6에선 맘대루 되지만 그 이상에선 깨진다.ㅠㅠ