char*[] makeList(char *path, int *noOfFiles);
我认为我的意图很明确,但这不起作用。
P.S。我需要将返回值存储在名为char *fileList[260]
而不是char** fileList.
答案 0 :(得分: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
以上。如果要返回的文件多于传入的数组可以容纳的文件,它可以返回一个结果,表明它需要一个更大的数组。
答案 1 :(得分:1)
char *fileList[]
和char **fileList
在功能上是相同的(或者可以是)。在C中,如果要传递或返回数组,则应该(可能)仅使用指针。在某些情况下允许使用数组(即如果在编译时已知数组的长度),但是(在我看来)它更容易使用指针。
此外,这个问题或多或少已得到回答:Declaring a C function to return an array