C ++:获取注册表值仅给出第一个字符

时间:2018-09-05 19:25:18

标签: c++ string windows winapi registry

我正在尝试从注册表中获取一个字符串值,但是我只得到了第一个字母。

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

我在做什么错?谢谢。

1 个答案:

答案 0 :(得分:0)

您有一个core数组,但是char在宽字符版本中需要一个RegQueryValueEx数组。当今,大多数程序都是宽字符应用程序,但是如果不确定,可以使用Microsoft定义的常量wchar_t代替TCHARchar

之所以只得到一个字符,是因为第一个字符的值在1到255之间。这样的16位字符代码的高字节为零,因此在内存中看起来像是字符串终止符。