1

我在我的程序中使用了lenA和类型。当我将此变量传递给 or时,显示此错误: lenBintconsensus_a[]consensus_b[]

expression must have a constant value.

我如何将这些变量(lenAlenB)传递给 charconsensus_a[]consensus_b[].

我的程序的一小部分:

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

2 回答 2

4

您可能正在运行不符合 C99 的编译器(可能是因为它比 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));

butsizeof(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 回答