注册表只写4个字符

时间:2015-07-15 22:47:04

标签: c++ windows winapi visual-c++

当我尝试编写RegEdit密钥时,他只写入文件路径的前4个字符。

HKEY hKey;
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey);
RegSetValueEx(hKey, "Test", 0, REG_SZ, (BYTE*)file, sizeof(file));
RegCloseKey(hKey);

3 个答案:

答案 0 :(得分:2)

sizeof(pointer)在32位系统上给出4。请改为string::size (online documentation)

std::string filename ("file.exe");
RegSetValueEx( ..., filename.size());

答案 1 :(得分:1)

显然你的file是一个指针。 sizeof(file)是指针的大小,以字节为单位,在您的平台上为4。

什么是file?怎么声明?它指向什么?为什么要在其上使用sizeof来确定要写入多少字节?如果file是指向C风格字符串的指针,则sizeof将无法帮助您确定该字符串的长度。你需要strlen

答案 2 :(得分:1)

如果file是char数组,那么......

RegSetValueEx(hKey, "Test", 0, REG_SZ, (BYTE*)file, strlen(file) + 1); // API says to include terminating NULL.

“lpData参数指向的信息大小,以字节为单位。如果数据类型为REG_SZ,REG_EXPAND_SZ或REG_MULTI_SZ,则cbData必须包含终止空字符或字符的大小。”

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724923(v=vs.85).aspx