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

変数を使用して、この方法で任意の型の静的配列を初期化することはできません。それは const でなければならないと私は信じています。

VS2010: error C2057: expected constant expression

于 2012-04-17T12:52:27.040 に答える
1

Online C99 Standard (n1256)

6.7.8 Initialization
...
3 The type of the entity to be initialized shall be an array of unknown size or an object type that is not a variable length array type.

The declaration char withoutLeadingZeroes[l] = ""; declares withoutLeadingZeros as a variable-length array, and attempting to initialize it as you're doing here is a constraint violation.

The diagnostic could be a bit clearer, though.

Edit

Can you point out exactly which line gets the error? I get a much clearer diagnostic with gcc, and I thought XCode ran gcc under the hood.

于 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 に答える