0

我刚刚遇到了一个奇怪的问题。

此代码有效:

int l = strlen(output); // l = 20 (believe me)
char withoutLeadingZeroes[20] = "";

这不会:

int l = strlen(output); // l = 20 (believe me)
char withoutLeadingZeroes[l] = "";

我收到此错误

数组初始值设定项必须是初始值设定项列表或字符串文字

我真的不明白。有什么建议么?来自维也纳的问候:-)

4

3 回答 3

2

您不能使用变量以这种方式初始化任何类型的静态数组。我相信它必须是常量。

VS2010: error C2057: expected constant expression

于 2012-04-17T12:52:27.040 回答
1

在线 C99 标准 (n1256)

6.7.8 初始化
...
3 要初始化的实体的类型应该是一个未知大小的数组或一个不是可变长度数组类型的对象类型。

该声明char withoutLeadingZeroes[l] = "";声明withoutLeadingZeros可变长度数组,并且尝试像您在此处所做的那样对其进行初始化是违反约束的。

不过,诊断可能会更清楚一些。

编辑

您能准确指出哪一行出现错误吗?我使用 gcc 得到了更清晰的诊断,我认为XCode 在后台运行 gcc。

于 2012-04-17T15:16:13.173 回答
0

C 不支持 VLA(可变长度数组),也许 C99 以后不确定 C 标准 VLA 的内容。

建议:

int len = strlen(output);
char * wo_zeros = (char *)malloc(len);
strcpy(wo_zeros, "");
//do something with wo_zeros
free(wo_zeros);
于 2012-04-17T12:53:01.400 回答