0

可能重复:
初始化时字符数组出错

我想在 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' 我认为这是因为编译器需要在编译之前知道我的变量的大小,但是我不知道如何解决这个问题......

谢谢 !

4

2 回答 2

1

c_str()返回 a const char*,而不是 a char[]。改变

char value[] = appDataPath.c_str();

const char* value = appDataPath.c_str();

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

于 2013-01-21T14:24:30.147 回答
0

采用

const char * value = appDataPath.c_str();

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


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

使用 C++ 字符串而不是使用char *s 执行此操作,并在以后转换它们:

string newstring = appDataPath;
newstring.append("some text");
const char * value = newstring.c_str();
于 2013-01-21T14:23:38.497 回答