문제

GetVolumeInformation 호출을 사용하여 이동식 장치의 이름을 검색하고 싶습니다.나는 그 이름을 잘 검색하고 TCHAR 배열 변수 szvolnamebuff에 저장할 수 있습니다.다음은 그 코드입니다.

 // Get Volume Information to check for NTFS or FAT

  TCHAR szFileSys[256];
  TCHAR szVolNameBuff[256];
  DWORD dwSerial = 0;
  DWORD dwMFL = 0;
  DWORD dwSysFlags = 0;
  bool bSuccess;
  char fileType[255];
  int bSuccessdebug = 0;
  //LPCTSTR temp = _T("E:\\"); For debugging only

  bSuccess = GetVolumeInformation(drivePath, 
                                szVolNameBuff,
                                sizeof(szVolNameBuff),
                                &dwSerial, 
                                &dwMFL, 
                                &dwSysFlags,
                                szFileSys,
                                sizeof(szFileSys));
.

라인과 변수의 내용을 인쇄하려고 할 때 :

printf("szVolNameBuff holds: %s \n", &szVolNameBuff);
.

드라이브의 이름 인 "Transcend"라는 이름 대신 "T"의 출력을 얻습니다.Visual Studio 2008으로 디버깅하고 Tchar 배열이 이름을 다음과 같이 저장한다는 것을 알았습니다. [0] 'T' [1] 0. [2] 'r' [3] 0. [4] 'A' [5] 0. [6] 'n' [7] 0

등등.왜 그런 겁니까?배열이 단어를 단순한 단어를 저장하고 싶습니다.

[0] 'T' [1] 'r' [2] 'A' [3] 'n' [4] 's'

나중에 문자열 연결에 사용하십시오.이 문제를 해결할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

유니 코드 Win32 API를 사용하는 것처럼 보입니다.해당 함수 (PRINTF 또는 WPRINTF)가 문자 유형에 따라 사용되도록 _TPRINTF를 사용해야합니다.

유니 코드를 모르는 경우 - 여기에 빠르게 개요가 있습니다.이 일이 일어나고있는 이유는 일반 ASCII 문자의 유니 코드가 NULL 바이트 다음 ASCII 문자가 오는 것입니다.이것이 당신이 당신이 null로 패딩 된 문자열을보고있는 이유입니다.

TCHAR을 사용할 때 _t () 매크로의 모든 문자열을 랩핑하여 올바른 유형으로 선언되도록해야합니다.일관되게이를 따르면 유니 코드에서 ANSI로 변환하는 것이 전처리기구 지침을 변경하는 문제 일뿐입니다.

다른 팁

Win32 API의 유니 코드 버전을 사용하고있는 이유는 무엇입니까?

와 2 개의 수정 사항이 있습니다.첫 번째는 프로젝트의 문자 집합을 프로젝트 -> 속성 -> 구성 등록 정보 -> 일반 -> 문자 집합에서 '설정되지 않음'으로 변경하여 Visual Studio를 사용하는 경우 API의 표준 버전을 사용하는 것입니다.vs를 사용하지 않으면 유니 코드가 #defined가 #defined되지 않았는지 확인하십시오.

MDMA가 말했듯이 두 번째 수정 사항은 표준 라이브러리에서 유니 코드 텍스트 조작 기능 WPrintf를 사용하거나 % s를 사용하는 것입니다.이 프로그램이 프로그램이 국제화 친숙 해지고 파일 이름을 사용하고있는 문자 집합에 대해서는 업무를 수행 할 수있는 기본 수정 프로그램입니다.그러나 모든 다운 스트림 기능은 유니 코드를 사용할 필요가 있음을 의미합니다. 프로젝트의 크기에 따라 많은 작업을 의미 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top