структура программы - PullRequest
0 голосов
/ 17 марта 2011

Я не могу запустить мою структурную программу.поскольку он получает ошибку «требуется постоянное выражение».в этой строке:

 struct book_info book[i];

Ответы [ 3 ]

4 голосов
/ 17 марта 2011

Вы почти наверняка используете компилятор (или режим компилятора), который не поддерживает массивы переменной длины.

Возможность объявить массивы переменной длины (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’
0 голосов
/ 17 марта 2011

В старом стандарте C (C89) вы могли устанавливать длину массива только с «постоянным числовым литералом», то есть

int array[100];

или

#define X 100
int array[X];

В новом стандарте C(C99) то же самое применимо, если переменная размещена в области видимости файла (глобальной).Но если массив размещен в локальной области (внутри функции), тогда C99 позволяет использовать непостоянное значение, как в вашем примере.

0 голосов
/ 17 марта 2011

Вы должны использовать динамическое размещение. Я думаю, что это именно то, что вы хотите: http://fydo.net/gamedev/dynamic-arrays

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...