[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:
첨부 | 파일 크기 |
---|---|
qes.JPG | 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?
--
댓글 달기