我正在使用此代码获取 Windows 版本:
#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;
}
我正在测试它:
LPTSTR OSv= new TCHAR[BUFSIZE];
config c;
c.GetOS(OSv);
MessageBox(OSv, 0, 0);
在 msgbox 中,我得到类似 äì5.1.20(其中 5.1.20 = OSv)的内容,但前 2 或 3 个字符是一些我不知道它们何时出现的奇怪字符。更奇怪的是,如果我再次调用第二段它显示正常,它只在我第一次执行时显示奇怪的字符。
有人知道这里发生了什么吗?
最佳答案
你的问题是你应该使用 StringCchCopy而不是 StringCchCat。
StringCchCat 将搜索直到在字符串中找到 0,然后将结果追加到那里。由于您没有将输出字符串缓冲区初始化为 0,因此您不能假设它将以 0 开头。
关于c++ - LPTSTR 开头的奇怪字符? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890588/