카테고리 Archives: 학습

얼라리요?

wchar_t buf[50];

 

로 잡은 buf 안에 문자열을 카피해넣고 문자열 마지막 부분의 \0을 지웠을 때 wcslen(buf)하면  \0이 없어서인지 범위를 넘어서 메모리 한참 뒤쪽의 \0에 해당하는 부분까지 읽어들여서 버퍼 잡아놓은 것 이상 값이 나오는 건가?

sizeof(buf) = 100(0x64) (2byte씩 50자)으로 맞게 나오는데, wcslen(buf)= 59(0x3b)(메모리 상태에 따라 다름)로 나온다. _s를 쓰거나 최대사이즈를 정해줘야하나?

 

 

 

TCPIP

Command 창에서는 Multibyte 문자로 입력받으므로,

MultiByte 입력 -> 내부에서 유니코드로 처리 -> 보낼 때 BSTR -> BSTR로 받아서 -> 유니코드로 변환 작업.

int cstringlen, out_size = 0;
BSTR wstr;
cstringlen = strlen(buf);
out_size = MultiByteToWideChar(CP_UTF8 , 0, buf, cstringlen, NULL, 0);
wstr = SysAllocStringLen(NULL, out_size);
MultiByteToWideChar(CP_UTF8, 0, buf, cstringlen, wstr, out_size);

 

보내고 받는 쪽 모두 코드를 UTF8로 해놓을 것. CP_ACP로 해놓으면 각각의 시스템별 코드페이지를 참조해서 엉망이된다.

 

콘솔 시 : 보내는 쪽 CP_ACP로 변환한 뒤 wchar 대응시키고, 이걸 보낼 땐 CP_UTF8로 바꿔서 전송.