考虑以下代码

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/

10-13 06:18