如何正确声明这个功能?

时间:2013-08-22 22:48:58

标签: c arrays string function function-declaration

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

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

P.S。我需要将返回值存储在名为char *fileList[260]而不是char** fileList.

的变量中

2 个答案:

答案 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