C 中表达式必须具有常量值

Has*_*dge 2 c arrays

int LCS_length(char* x, char* y)
{
    int m = strlen(x);
    int n = strlen(y);

    char b[m + 1][n + 1];
    char c[m + 1][n + 1];
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我想声明一个新的二维数组,但我的编译器给我写了这个错误:

表达式必须具有常量值

谁知道我能做什么,因为编译器不允许我用 C 语言执行此语句?

注意:它只是代码的一部分,后面有 return 语句。

Lun*_*din 5

您必须使用标准 C 编译器(例如 gcc 或 clang 等)编译代码。您不能使用 C++ 编译器或非 C 编译器(例如 Microsoft VS)进行编译。

除此之外,除了缺少一条return语句之外,代码都很好。

如果你被旧的垃圾编译器困住了,你也可以做一个旧式的“mangled array”:

size_t m = strlen(something) + 1;
size_t n = strlen(something) + 1;
...
char* b = malloc(m*n);
...
b[i*n + j] = something;
...
free(b);
Run Code Online (Sandbox Code Playgroud)

这就是我们过去动态分配二维数组的方式。

在现代标准 C 中使用动态分配的等效代码是:

char (*b)[n] = malloc( sizeof(char[m][n]));
...
b[i][j] = something;
...
free(b);
Run Code Online (Sandbox Code Playgroud)