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