C错误数组:数组类型具有不完整的元素类型。
问题描述:
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