[MFC] List Box에 문자열 출력시 깨짐 현상
      글쓴이: skypigzz / 작성시간: 금, 2009/05/08 - 3:03오후    
  
  안녕하세요
List Box에 연결리스트에 저장되어 있는 문자열을 출력하려고 합니다.
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	UpdateData();
	CString str;
	char temp[MAX];
	memset(temp, 0, sizeof(temp));
 
	//	sprintf(temp, " prints the packets of the network using WinPcap.");
	//    str = (LPCSTR)(LPSTR)temp;
	//	str = temp;
	m_Setup.AddString( TEXT("prints the packets of the network using WinPcap."));
	if (pcap_findalldevs(&alldevs, errbuf) == -1)
	{
		str.Format(TEXT("Error in pcap_findalldevs: %s"), errbuf);
		AfxMessageBox(str);
		exit(1);
	}
	/* Print the list */
	for(d=alldevs; d; d=d->next)
	{
		strcpy(temp, d->name);
		str.Format(L"%d. %s", ++i, temp);
		m_Setup.AddString(str);
		if (d->description)
		{
			str.Format(L" (%s)",  d->description);
			m_Setup.AddString(str);
		}
		else
			m_Setup.AddString(TEXT(" (No description available)"));
	}
	str.Format(_T("Enter the interface number (1-%d)"),i);
	m_Setup.InsertString(0, str);위의 모습데로 출력을 하였는데 원래 나와야 하는 data 값은
\Device\NPF_{3ABC49F7-4DA3-4084-AEE3-F33AA1C77CAD) 야 합니다
그런데 실제 출력이 되는 부분은
"䑜癥捩履偎彆㍻䉁㑃䘹ⴷ䐴㍁㐭㠰ⴴ䕁㍅䘭㌳䅁䌱㜷䅃組"
이렇게 이상한.... -_ㅠ 글씨로 변해버립니다.
str.Format(L"%d. %s", ++i, temp);
이 지나고 나서부터 이러한 괴기한 문제가 발생해버리네요
첨부 파일은 디버깅 된 모습을 보여준겁니다.
도와주실수 있으세요? ㅠ
File attachments: 
| 첨부 | 파일 크기 | 
|---|---|
| 93.22 KB | 
Forums: 


제가 실력이 없어서 그런지는 몰라도..
유니코드 문제같습니다.
\Device\NPF_{3ABC49F7-4DA3-4084-AEE3-F33AA1C77CAD) 라고 돼있는 부분을 멀티바이트 코드로 간주하고
유니코드로 강제 변환해서 코드 산정을 해보니 비슷하게 나오는군요.
첨부된 파일은 위 문자열을 멀티바이트형태로 텍스트저장한뒤 강제로 유니코드 헤더를 붙인겁니다.
메모장으로 열어보면 위에 그 깨진 문자가 나오지만, 헥사에디터로 보시면 원래의 문자열이 살아있는걸 볼수있습니다.
결론은 현재 프로젝트가 유니코드로 되어있다는 뜻이고 d->name은 유니코드가 아니라는 얘기이므로 strcpy랑 Format으로 문자열을 넣으실때 유니코드 처리를 해줘야 된다는 겁니다. 또는, 현재의 프로젝트를 멀티바이트 캐릭터셋으로 변환을 하시든지요. 다국어 관련 이슈가 없는 경우엔 이쪽이 더 나을지도 모르겠습니다. ^^
--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
--
댓글 달기