将变量传递给数组维度错误

时间:2013-03-03 17:26:56

标签: c

我在我的程序中使用了lenAlenB int类型。当我将此变量传递给consensus_a[]consensus_b[]时,会显示以下错误:

expression must have a constant value.

如何将这些变量(lenAlenB)传递给char consensus_a[]consensus_b[]

我的计划的一小部分:

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

2 个答案:

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

答案 1 :(得分:0)

您的编译器抱怨您正在尝试声明一个可变长度的数组。对于不符合C99标准或更新标准的编译器而言,这是不可能的。使用常数值代替lenA / lenB