1
char*[] makeList(char *path, int *noOfFiles);

我认为我的意图很明确,但这不起作用。

PS我需要将返回值存储在一个名为char *fileList[260]而不是char** fileList.

4

2 回答 2

2

不能从函数返回指针数组,除非它被包裹在struct. 如果你试图返回一个数组,它会衰减为一个指针值,所以返回结果实际上是一个指针。

即使您设法以某种方式返回了一个指针数组,fileList如果它被定义为char *fileList[260]. 作为fileList一个数组类型,你被禁止分配给一个数组。

如果希望函数修改数组的内容(或填充数组),则需要将数组传递给函数。

int makeList(char *path, int *noOfFiles, char *listOfFiles[], int maxFileCount);

/*...*/
char *fileList[260];
int fileCount;
int result = makeList("/some/path", &fileCount, fileList,
                      sizeof(fileList)/sizeof(*fileList));

您的makeList()函数应确保它写入的maxFileCount条目不超过listOfFiles. 如果要返回的文件多于传入的数组可以容纳的文件,它可以返回一个结果,表明它需要一个更大的数组。

于 2013-08-22T23:02:46.880 回答
1

char *fileList[]并且char **fileList在功能上是(或可以是)相同的。在 C 语言中,如果要传递或返回数组,则应该(可能)只使用指针。在某些情况下允许使用数组(即如果数组的长度在编译时已知),但(在我看来)更容易适应指针。

此外,这个问题或多或少已经得到了回答:Declaring a C function to return an array

于 2013-08-22T22:52:32.787 回答