나는 윈도우 버전을 얻으려면이 코드를 사용하고 있습니다 :LPTSTR의 시작 부분에 이상한 문자가 있습니까? C++
#define BUFSIZE 256
bool config::GetOS(LPTSTR OSv)
{
OSVERSIONINFOEX osve;
BOOL bOsVersionInfoEx;
ZeroMemory(&osve, sizeof(OSVERSIONINFOEX));
osve.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osve)))
return false;
TCHAR buf[BUFSIZE];
StringCchPrintf(buf, BUFSIZE, TEXT("%u.%u.%u.%u"),
osve.dwPlatformId,
osve.dwMajorVersion,
osve.dwMinorVersion,
osve.dwBuildNumber);
StringCchCat(OSv, BUFSIZE, buf);
return true;
}
을 그리고 나는 그것을 테스트입니다 : (여기서 5.1
LPTSTR OSv= new TCHAR[BUFSIZE];
config c;
c.GetOS(OSv);
MessageBox(OSv, 0, 0);
그리고 MSGBOX에 나는이 äì5.1.20 같은 것을 얻을 .20 is = to OSv)하지만 처음 2 ~ 3 문자는 그들이 어땠는지 모를 이상한 문자입니다. 낯선 사람이라 할지라도, 두 번째 작품을 다시 불러 주면 처음에는 이상한 캐릭터 만 보여줄 것입니다.
누군가 여기서 무슨 일이 일어 났는지 생각하고 있습니까?
문제의 근원은 초기화되지 않은 메모리 블록이지만 cat 대신 copy를 사용하는 것이 그 일을 처리하는 한 가지 방법입니다. +1. –
마찬가지로, 어느 쪽이든 작동합니다. 근본적인 문제는 StringCchCat의 오해이거나 버퍼를 초기화하는 것을 잊어 버리는 것입니다. –
어떻게 메모리 블록을 초기화합니까? – extintor