我在我的程序中使用了lenA
和lenB
int
类型。当我将此变量传递给consensus_a[]
或consensus_b[]
时,会显示以下错误:
expression must have a constant value.
如何将这些变量(lenA
或lenB
)传递给char consensus_a[]
或consensus_b[]
。
我的计划的一小部分:
int lenA=10, lenB=15;
char consensus_a[lenA],consensus_b[lenB];
答案 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
。