如何使用C ++在注册表中插入变量值?

时间:2013-01-21 14:20:16

标签: c++ windows variables registry

  

可能重复:
  Char array gives error when initializing

我想在Windows注册表中插入一个环境变量,所以我绑定了以下C ++代码:

string appDataPath = getenv("appdata");

    HKEY hkey;
    char value[] = appDataPath.c_str();

    RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\Currentversion\\Run", 0, KEY_SET_VALUE, &hkey);
    RegSetValueEx (hkey, "MyProgram", 0, REG_SZ, (LPBYTE) value, strlen(value) + 1);
    RegCloseKey(hkey);

代码块调试输出告诉我:error: initializer fails to determine size of 'value' 我认为这是因为编译器在编译之前需要知道变量的大小,但是我不知道如何解决这个问题...

谢谢!

2 个答案:

答案 0 :(得分:1)

c_str()会返回const char*,而非char[]。变化

char value[] = appDataPath.c_str();

const char* value = appDataPath.c_str();

编译器提供错误,因为数组变量需要一个长度 - 这是没有提供的。

答案 1 :(得分:0)

使用

const char * value = appDataPath.c_str();

(阅读< string>参考以找到c_str()的返回类型,它会告诉您它确实是const char *。)


关于如何连接两个字符串的问题:

使用C ++字符串而不是char *来执行此操作并稍后进行转换:

string newstring = appDataPath;
newstring.append("some text");
const char * value = newstring.c_str();