2011-04-30 92 views
1

我聲明一個字符串數組非常簡單,硬編碼,但它不斷給我array type has incomplete element type錯誤。C多維數組字符串

我想這與每個數組的長度有關,但我不知道如何解決這個問題,沒有爲字符串設置固定的長度。

char allocate[][2][] = { // Error with or without the 2 
    {"value1","value2"}, 
    {"value3","value4"} 
}; 

回答

10

該語法無效。如果您想要一個真正的多維數組,除第一個維外,必須指定所有維。 (編譯器必須知道「內」陣列有多大,以便執行地址計算的外部尺寸。)

嘗試此代替:

const char *allocate[][2] = { 
    {"value1","value2"}, 
    {"value3","value4"} 
}; 

它聲明的const char *的2D陣列。

請注意,如果你想要的字符串,你可以到,那麼上述方法將無法正常工作。

+0

所以這個數組包含指向字符串的指針(然後將其存儲在數組之外?)如果刪除了'const'關鍵字,你不能寫入字符串嗎? – 2011-04-30 13:44:44

+0

@J V:不,這是未定義的行爲(儘管通常你會得到一個seg-fault)。字符串文字是隻讀的,實際上應該總是用'const char *'指向。 C允許你使用'char *'的唯一原因是出於一些向後兼容性問題。 – 2011-04-30 13:48:43