我有:
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)