数组元素是C中字符串数组的变量

时间:2014-01-31 23:07:04

标签: c arrays string

我正在尝试在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

2 个答案:

答案 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
};