C语言中的字符串奇怪

C语言中的字符串奇怪,c,string,C,String,我刚刚遇到了一个奇怪的问题 此代码适用于: int l = strlen(output); // l = 20 (believe me) char withoutLeadingZeroes[20] = ""; 但这并不是: int l = strlen(output); // l = 20 (believe me) char withoutLeadingZeroes[l] = ""; 我得到了这个错误 数组初始值设定项必须是初始值设定项列表或字符串文字 我真的不明白。有什么建议吗? 来自维也

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

此代码适用于:

int l = strlen(output); // l = 20 (believe me)
char withoutLeadingZeroes[20] = "";
但这并不是:

int l = strlen(output); // l = 20 (believe me)
char withoutLeadingZeroes[l] = "";
我得到了这个错误

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

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

您不能通过使用变量以这种方式初始化任何类型的静态数组。我相信一定是康斯特

VS2010:
错误C2057:预期的常量表达式

您不能使用变量以这种方式初始化任何类型的静态数组。我相信一定是康斯特

VS2010:
错误C2057:预期的常量表达式

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);
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);

6.7.8初始化

3待初始化实体的类型应为大小未知的数组或对象类型 这不是可变长度数组类型。 声明
char不带前导零[l]=“”
将不带前导零的
声明为可变长度数组,并且在这里尝试初始化它是违反约束的

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

编辑

你能准确指出哪一行出错吗?我对gcc有了更清晰的诊断,我认为XCode在引擎盖下运行了gcc。

6.7.8初始化

3待初始化实体的类型应为大小未知的数组或对象类型 这不是可变长度数组类型。 声明
char不带前导零[l]=“”
将不带前导零的
声明为可变长度数组,并且在这里尝试初始化它是违反约束的

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

编辑



你能准确指出哪一行出错吗?我对gcc有了更清晰的诊断,我认为XCode在幕后运行了gcc。

你说的“它不工作”是什么意思?对于编程问题,“不工作”几乎从来都不是一个有用的解释。你看到的结果是什么?你说得很对,对不起!我使用的是Xcode(最新版本),错误是“数组初始值设定项必须是初始值设定项列表或字符串文字”。你说“它不工作”是什么意思?对于编程问题,“不工作”几乎从来都不是一个有用的解释。你看到的结果是什么?你说得很对,对不起!我使用的是Xcode(最新版本),错误是“数组初始值设定项必须是初始值设定项列表或字符串文字”。不仅仅是常量,编译时常量,它们不一定总是相同的。嗯,我想你是对的。我并没有把重点放在关键字中的“const”上,但我应该相应地编写它。谢谢,我会记住这一点,虽然在本例中“l”代表20的值。@RainerSchmid,你可能会这么认为,但编译器没有。最后,重要的是编译器的意见。@RainerSchmid表示20或。。符合int的任何其他值。编译器无法事先知道
l
的值是什么。(如果strlen()用于常量字符串,也许可以,但是您将依赖于编译器的智能)不仅仅是常量,编译时常量,它们不一定总是一样的。嗯,我想您是对的。我并没有把重点放在关键字中的“const”上,但我应该相应地编写它。谢谢,我会记住这一点,虽然在本例中“l”代表20的值。@RainerSchmid,你可能会这么认为,但编译器没有。最后,重要的是编译器的意见。@RainerSchmid表示20或。。符合int的任何其他值。编译器无法事先知道
l
的值是什么。(如果strlen()用于常量字符串,也许可以,但您将依赖于编译器的智能)您是完全正确的,对不起!我正在使用Xcode(最新版本),错误是“数组初始值设定项必须是初始值设定项列表或字符串文字”。这是我在这里的第一篇文章,所以我忘记了一些要点。你说得很对,对不起!我使用的是Xcode(最新版本),错误是“数组初始值设定项必须是初始值设定项列表或字符串文字”。这是我在这里的第一篇文章,所以我忘记了一些要点。谢谢。错误是:“数组初始值设定项必须是初始值设定项列表或字符串文字”,如果我在前一行中执行“int l=20”,我也会收到错误,但如果执行“const int l=20”,它会工作。这就是我不太明白的。(l的值在编译时就知道了!)哇。你是把这个编译成C还是C++?这个错误给出了确切的行号吗。显然,我对XCode使用gcc的看法是错误的;从3.2开始,它一直在使用LLVM和clang。每天学习新的东西。谢谢。错误是:“数组初始值设定项必须是初始值设定项列表或字符串文字”,如果我在前一行中执行“int l=20”,我也会收到错误,但如果执行“const int l=20”,它会工作。这就是我不太明白的。(l的值在编译时就知道了!)哇。你是把这个编译成C还是C++?这个错误给出了确切的行号吗。显然,我对XCode使用gcc的看法是错误的;从3.2开始,它一直在使用LLVM和clang。每天学习新的东西。