2011-03-17 91 views
0

我無法運行我的結構程序。 ,因爲它正在獲得「需要的常量表達式」錯誤。 在這一行:結構程序

struct book_info book[i]; 
+0

請用適當的語言標記您的問題(編輯您的帖子)。該ora-xxxx錯誤標記是無關的。我猜對了[E]。 – Mat 2011-03-17 07:02:16

+0

請提供更多的上下文。 – 2011-03-17 07:20:37

回答

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’ 
+3

...最重要的是,變長數組不能在文件範圍中定義。 – AnT 2011-03-17 07:05:50

0

您應該使用動態分配。我想,這正是你想要的東西: http://fydo.net/gamedev/dynamic-arrays

問候

+1

這不是個好建議。你完全不知道OP在編程什麼樣的系統,所以你不知道使用動態分配是合適的,多餘的還是完全禁止的。 – Lundin 2011-03-17 07:37:05

+0

可能需要添加一些細節。我推測是運行Linux或Windows。 – Sacx 2011-03-17 07:40:13

+0

這個數組的分配被聲明爲「i」大小 - 沒有跡象表明數組的大小在其整個生命週期內都會改變,因此不需要它是動態的。 – 2011-03-17 07:47:06

0

在舊的C標準(C89),你可以只設置數組長度有「恆數字文字」,即

int array[100]; 

#define X 100 
int array[X]; 

在新的C標準(C99),如果變量被在文件範圍(全局)分配同樣適用。但是,如果數組在本地作用域(在函數內部)分配,那麼C99允許您使用非常量值,如您的示例中所示。

+0

我認爲這沒有幫助。可能OP希望從程序動態調整數組的大小,而不知道數組在程序啓動時會有多大的大小。 – Sacx 2011-03-17 07:41:24

+0

@Sacx可能你錯了。無論你是否,這確實有幫助。 – 2011-03-17 07:48:15

+0

@Sacx正如我寫的,C99允許你這樣做,只要數組可以分配到堆棧而不是堆。 – Lundin 2011-03-17 13:28:19