c++ - LPTSTR 开头的奇怪字符? C++

标签 c++ string winapi visual-c++

我正在使用此代码获取 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/

相关文章:

c++ - 保留插入顺序但不允许重复的 STL 容器

c - 如何查找并打印字符串中的重复字符?

winapi - 在VC++中编译并链接CxImage静态库

java - 如何使用 JNA 获取 Activity 窗口的应用程序名称?

c++ - 在 Qt Creator 中将字符数据转换为 QString

c++ - 从字母数字 QString 中提取数字

C++ 安全 boolean 包装器

android - 如何将多个整数发送到新 Activity ?

java - 当 float 完全是整数时,为什么 float 尾部有 .0?

c++ - 如何通过 C++ 检索已提交的内存