1

私は自分のプログラムでlenAand lenBofintタイプを使用しました。consensus_a[]この変数をまたはに渡すと consensus_b[]、次のエラーが表示されます。

expression must have a constant value.

lenAこれらの変数 (またはlenB) を charconsensus_a[]またはに渡すにはどうすればよいですかconsensus_b[]

私のプログラムのごく一部:

    int lenA=10, lenB=15;
    char consensus_a[lenA],consensus_b[lenB];
4

2 に答える 2

4

C99 に準拠していないコンパイラを実行している可能性があります (おそらくそれよりも古いため) (既に述べたように、コードは C99 準拠のコンパイラでコンパイルする必要があります)。

これらのコンパイラでは、次の形式の配列に対して

char a[x];

x定数である必要があります。

使用できますconst

const int lenA=10, lenB=15;
char consensus_a[lenA],consensus_b[lenB];

またはenum:

enum
{
  lenA = 10,
  lenB = 15
};
char consensus_a[lenA], consensus_b[lenB];

または#define:

#define lenA 10
#define lenB 15
char consensus_a[lenA], consensus_b[lenB];

またはmalloc(定数にしたくない場合):

char *consensus_a = malloc(lenA),
     *consensus_b = malloc(lenB);

技術的には次のようになります。

char *consensus_a = malloc(lenA*sizeof(char)),
     *consensus_b = malloc(lenB*sizeof(char));

しかしsizeof(char)1 なので、用語を含める必要はありません。

を使用する場合は、使用後にそれらmallocも忘れないでください。free

free(consensus_a);
free(consensus_b);
于 2013-03-03T17:35:29.893 に答える
0

コンパイラは、可変長の配列を宣言しようとしていると不平を言います。これは、C99 標準以降に準拠していないコンパイラでは不可能です。lenA/の代わりに定数値を使用しますlenB

于 2013-03-03T17:31:15.067 に答える