考虑以下代码
addHash("hash");
bool addHash(char* hash) {
HKEY hKey = 0;
int code = RegOpenKey(HKEY_CURRENT_USER, subkey, &hKey);
const int length = strlen(hash)+1;
WCHAR whash[100];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, hash, strlen(hash), whash, 100);
LONG setRes = RegSetValueEx(hKey, L"hash", 0, REG_SZ, (LPBYTE)whash, strlen(hash)+1);
return true;
}
编译并执行代码后,将“ ha”放入注册表。有人可以告诉我问题出在哪里吗?
先感谢您!
最佳答案
最后一个参数是第二个最后一个参数指向的字节数,而不是字符数。
因此,strlen(hash) + 1
的前五个字节(whash
)将存储在注册表中。改成:
LONG setRes = RegSetValueEx(hKey,
L"hash",
0,
REG_SZ,
(LPBYTE)whash,
(wcslen(whash) + 1) * sizeof(WCHAR));
您可能还需要初始化
whash
(我认为MultiByteToWideChar()
不会为您添加空终止符):WCHAR whash[100] = { 0 };
关于c++ - RegSetValueEx和CHAR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9067598/