我正在尝试从注册表中手动读取MachineGuid。这有效,RegQueryValueEx
给了我正在寻找的价值,但每个角色后面都有一个空终止字符,为什么会发生这种情况呢?
代码:
string read_reg_sz()
{
char Buffer[_MAX_PATH];
char dwMHz[_MAX_PATH] = {0};
DWORD BufSize = _MAX_PATH;
DWORD dataType = REG_SZ;
HKEY hKey;
long lError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Cryptography"), NULL, KEY_READ | KEY_WOW64_64KEY, &hKey);
if (lError != ERROR_SUCCESS)
{
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
lError,
0,
(LPWSTR)Buffer,
_MAX_PATH,
0);
cout << lError << endl;
return "N/A";
}
int val = RegQueryValueEx(hKey, L"MachineGuid", NULL, &dataType, (LPBYTE)&dwMHz, &BufSize);
if (val == ERROR_SUCCESS)
cout << "succes!" << endl;
else
cout << "failed!" << endl;
RegCloseKey(hKey);
cout << "\n reg data read: " << dwMHz;
return dwMHz;
}
结果是:
这只显示了我的MachineGuid的1个字符,它以“f”开头。所以我在Visual Studio中添加了一个断点,以便在regquery调用之后检查dwMHz
数组的值,这就是它的样子:
那么为什么我的结果数组被空终止字符污染了?