我刚遇到一个奇怪的问题。
此代码有效:
int l = strlen(output); // l = 20 (believe me)
char withoutLeadingZeroes[20] = "";
而这不是:
int l = strlen(output); // l = 20 (believe me)
char withoutLeadingZeroes[l] = "";
我收到此错误
数组初始值设定项必须是初始化列表或字符串文字
我真的不明白。有什么建议? 来自维也纳的问候: - )
答案 0 :(得分:2)
您不能通过使用变量以这种方式初始化任何类型的静态数组。我相信它必须是常数。
VS2010:
error C2057: expected constant expression
答案 1 :(得分:1)
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);