这个问题在这里已有答案:
我试图从注册表中获取字符串值,但我只收到第一个字母。
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
我究竟做错了什么?谢谢。
你有一个char
数组,但RegQueryValueEx
需要一个宽字符版本的wchar_t
数组。今天的大多数程序都是宽字符应用程序,但如果您不确定,可以使用Microsoft定义的常量TCHAR
而不是char
或wchar_t
。
您只获得单个字符的原因是因为第一个字符的值介于1和255之间。这样的16位字符代码的高字节为零,因此在内存中它看起来像一个字符串终止符。