C错误数组:数组类型具有不完整的元素类型。

问题描述:

我: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" 
+0

谢谢。 你提供了一个很好的材料。 – ambika 2010-03-18 12:36:22

char *[M] 是没有从char **不同。 char *[M]是一个char指针数组。维度在C中不起作用(在这种情况下)。大卫的意思是char (*)[M]这是一个指向M字符的指针,这将是你的原型的正确类型 - 但你的char [][M]也很好(实际上它是更常见的表述)。