C ++:获取注册表值只给出第一个字符[重复]

问题描述 投票:-1回答:1

我试图从注册表中获取字符串值,但我只收到第一个字母。

HKEY hKey;
char gamePath[MAX_PATH];
if(RegOpenKeyEx(HKEY_CURRENT_USER,L"Software\\Blizzard Entertainment\\Warcraft III",0,KEY_READ,&hKey) == ERROR_SUCCESS)
{
   DWORD type=REG_SZ, size=MAX_PATH;
   int error = RegQueryValueEx(hKey,L"GamePath",NULL,&type,(LPBYTE)&gamePath,&size);
   if(error != ERROR_SUCCESS)
       cout << "Failed to read registry value: " << error << endl;

   RegCloseKey(hKey);
}
else cout << "Failed to read registry key." << endl;

cout << gamePath << endl; //output: C

我究竟做错了什么?谢谢。

c++ string windows winapi registry
1个回答
0
投票

你有一个char数组,但RegQueryValueEx需要一个宽字符版本的wchar_t数组。今天的大多数程序都是宽字符应用程序,但如果您不确定,可以使用Microsoft定义的常量TCHAR而不是charwchar_t

您只获得单个字符的原因是因为第一个字符的值介于1和255之间。这样的16位字符代码的高字节为零,因此在内存中它看起来像一个字符串终止符。

© www.soinside.com 2019 - 2024. All rights reserved.