extern int docx(char *,char[][]) // in a header file
這是Solaris正確的編譯,但是在紅帽Linux它顯示了波紋管的錯誤:
array type has incomplete element type.
我知道我可以解決它 - char[][20]
是這是正確的方式?
extern int docx(char *,char[][]) // in a header file
這是Solaris正確的編譯,但是在紅帽Linux它顯示了波紋管的錯誤:
array type has incomplete element type.
我知道我可以解決它 - char[][20]
是這是正確的方式?
您將不得不知道該功能實際上期待什麼,並相應地修改接口。如果它期待一個二維陣列(char [N][M]
)正確的接口將是:
extern int docx(char *,char*[M]);
哪個不同於:
extern int docx(char*, char**);
在第一種情況的功能將被期待一個指針到一個連續的塊(&p[0][0]+M == &p[1][0]
和(void*)&p[0][0]==(void*)&p[0]
),而在第二種情況下,它會期望指向一個內存塊的指針,該指針指向可能連續或不連續的內存塊的指針(&p[0][0]
和&p[1][0]
無關和p[0]==&p[0][0]
)
// case 1
ptr ------> [...M][0123.........M]...[0123.........M]
// case 2
ptr ------> 0 [ptr] -------> "abcde"
1 [ptr] -------> "another string"
...
N [ptr] -------> "last string"
char *[M]
是沒有從char **
不同。 char *[M]
是一個char指針數組。維度在C中不起作用(在這種情況下)。大衛的意思是char (*)[M]
這是一個指向M字符的指針,這將是你的原型的正確類型 - 但你的char [][M]
也很好(實際上它是更常見的表述)。
謝謝。 你提供了一個很好的材料。 – ambika 2010-03-18 12:36:22