我无法运行我的结构程序。 因为它正在获得“需要持续表达”错误。 在这一行:
struct book_info book[i];
答案 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允许您使用非常量值,如示例所示。