2009-11-05 37 views
1

多餘的元素將我學習C和我玩弄指針和數組。我想創建一個指針數組與下面的代碼:內C - 陣列

const int NUM_P = 50; // Line 10 
char *pS[NUM_P] = { NULL }; // Line 11 

我收到以下警告和錯誤,當我編譯:

→GCC array.c -o陣列
array.c :在函數 '主':
array.c:11:錯誤:可變大小的對象可能不被初始化
array.c:11:警告:在數組初始化多餘元素
array.c:11:警告: (接近'pS'的初始化)

我想不通這個錯誤的時候,我在網上看了看,一直無法找到問題的解釋和解決方案。

任何人都可以幫忙嗎?

乾杯

EEF

+0

什麼是你想在 「字符* PS [NUM_P] = {NULL};」 怎麼辦? – 2009-11-05 12:40:56

+1

也許C語法有點混亂。在C中,const int意味着你正在創建一個你計劃在初始化之後不會改變的變量。在C++中,它是一個真正的常量,可以按照您的嘗試使用。 –

回答

4

你的主要問題是起始線(= {NULL};),因爲很明顯,當數組的大小是一個變量你不能初始化數組這樣。如果您使用#define NUM_P 50強制將數組大小設置爲真正的編譯時常量,那麼該數組的大小不會變化,並且您的初始化方法可以很好地編譯。

請注意,#define NUM_P 50const int NUM_P = 50之間的區別在於C89不允許使用變量作爲數組維數,但C99的確如此;但是,C99尚未得到所有編譯器的全面支持。 gcc接受您的字符數組的大小爲NUM_P的事實不符合C89標準。

從技術上講,你可以使用一個標誌在命令行上告訴你想在C99編譯GCC:

gcc -std=c99 FILE.c 

順便說一句,學習C時,開始在列出的錯誤的頂部和從那裏工作。在這種情況下,警告,直到你照顧的錯誤的頂部任何關心的問題:「可變大小的物體可能無法初始化」。

+0

謝謝,取'= {NULL};'解決了問題並且運行正常。實際上,我正在關注「C - 新手到專業」一書,並將其作爲教程的一部分來源!現在起作用了,再次感謝。 EEF – RailsSon