结构计划

时间:2011-03-17 06:58:32

标签: c

我无法运行我的结构程序。 因为它正在获得“需要持续表达”错误。 在这一行:

 struct book_info book[i];

3 个答案:

答案 0 :(得分:4)

您几乎肯定使用不支持可变长度数组的编译器(或编译器模式)。

声明可变长度数组(VLA)的能力已添加到C99中,因此,如果您的编译器不符合标准,或者您正在编译类似gcc -std=c89的内容,则它将无效。

例如:

pax$ cat qq.c
#include <stdio.h>
#include <string.h>
int main (void) {
    int i = 7;
    char x[i];
    strcpy (x, "xyz");
    printf ("%s\n", x);
    return 0;
}

pax$ gcc -std=c99 -pedantic -Wall -o qq qq.c ; ./qq
xyz

pax$ gcc -std=c89 -pedantic -Wall -o qq qq.c
qq.c: In function ‘main’:
qq.c:5: warning: ISO C90 forbids variable length array ‘x’

答案 1 :(得分:0)

您应该使用动态分配。我想这正是你想要的: http://fydo.net/gamedev/dynamic-arrays

此致

答案 2 :(得分:0)

在旧的C标准(C89)中,您只能使用“常量数字文字”设置数组长度,即

int array[100];

#define X 100
int array[X];

在新的C标准(C99)中,如果变量在文件范围(全局)分配,则同样适用。但是如果数组是在本地范围内(函数内部)分配的,那么C99允许您使用非常量值,如示例所示。