[MFC] List Box에 문자열 출력시 깨짐 현상

skypigzz의 이미지

안녕하세요

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: 
첨부파일 크기
Image icon qes.JPG93.22 KB
mirheekl의 이미지

유니코드 문제같습니다.

\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?

댓글 첨부 파일: 
첨부파일 크기
Plain text icon unitext.txt52바이트

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.