C中的字符串怪异

时间:2012-04-17 12:50:05

标签: c string

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

此代码有效:

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

而这不是:

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

我收到此错误

  

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

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

3 个答案:

答案 0 :(得分:2)

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

VS2010:     error C2057: expected constant expression

答案 1 :(得分:1)

Online C99 Standard (n1256)

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

声明char withoutLeadingZeroes[l] = "";withoutLeadingZeros声明为可变长度数组,并且在您执行此操作时尝试初始化它是违反约束的。

但诊断可能会更清楚一点。

修改

你能指出完全哪一行得到错误?我用gcc得到了一个更清晰的诊断,我认为 XCode在g引导gcc。

答案 2 :(得分: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);