我正在尝试在C中初始化一个字符串数组。我想从变量中设置数组的一个元素,但是我遇到了编译器错误。这有什么问题?
char * const APP_NAME = "test_app";
char * const array_of_strings[4] = {
APP_NAME,
"-f", "/path/to/file.txt",
NULL
};
错误为error: initializer element is not constant
。
答案 0 :(得分:3)
该标准区分const
- 限定变量和编译时间常数。
在C标准意义上,评估变量(APP_NAME
)不被视为编译时常量。此
char const app_name[] = "test_app";
char const*const array_of_strings[4] = {
&app_name[0],
"-f", "/path/to/file.txt",
0,
};
将被允许,因为这不是评估app_name
而是仅考虑其地址。
此外,您始终应该将字符串文字视为类型char const[]
。修改它们有不确定的行为,所以你应该保护自己不要这样做。
答案 1 :(得分:0)
我能够使用gcc 4.6.3:
使用此语法进行编译char* const APP_NAME = "test_app";
char* const array_of_strings[4] = {
APP_NAME,
"-f", "/path/to/file.txt",
NULL
};
如果编译器拒绝其他所有内容,您也可以尝试转换为const(风险自负):
char* const APP_NAME = "test_app";
char* const array_of_strings[4] = {
(char* const)APP_NAME,
"-f", "/path/to/file.txt",
NULL
};