C error数组:数组类型具有不完整的元素类型.

amb*_*ika 7 c arrays

我有:

extern int docx(char *,char[][]) // in a header file
Run Code Online (Sandbox Code Playgroud)

它在solaris中正确编译,但在Redhat Linux中它显示了以下错误:

array type has incomplete element type.
Run Code Online (Sandbox Code Playgroud)

我知道我可以解决它 - char[][20]

这是正确的方法吗?

Dav*_*eas 17

您必须知道函数实际期望的内容并相应地修改接口.如果它期望一个二维数组(char [N][M])正确的接口将是:

extern int docx(char *,char*[M]);
Run Code Online (Sandbox Code Playgroud)

这与以下内容不同:

extern int docx( char*, char** );
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,函数将期望指向存储N*M字符(&p[0][0]+M == &p[1][0](void*)&p[0][0]==(void*)&p[0])的连续内存块,而在第二种情况下,它将期望指向内存块的N指针,该内存块保存指向可能或者内存块的指针.不是连续的(&p[0][0]并且&p[1][0]是无关的p[0]==&p[0][0])

// case 1
ptr ------> [0123456789...M][0123.........M]...[0123.........M]

// case 2
ptr ------> 0 [ptr] -------> "abcde"
            1 [ptr] -------> "another string"
              ...
            N [ptr] -------> "last string"
Run Code Online (Sandbox Code Playgroud)