2013-08-22 100 views
1
char*[] makeList(char *path, int *noOfFiles); 

我認爲我的意圖很明確,但這不起作用。如何正確聲明這個函數?

P.S.我需要存儲在一個名爲char *fileList[260]變量的返回值,而不是char** fileList.

回答

2

這是不可能的,除非它被包裹在裏面struct從函數返回一個指針數組。如果你試圖返回一個數組,它會衰減成一個指針值,所以返回結果實際上就是一個指針。

即使您設法以某種方式返回指針數組,但如果它定義爲char *fileList[260],您將無法將其指定給變量fileList。由於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。它可以返回一個結果,指出如果有更多的文件要返回,那麼它需要一個更大的數組。

+0

也許你的意思是「...應該確保它不會**寫更多...」 –

+0

@洛倫佐多納蒂:是的,謝謝! – jxh

1

char *fileList[]char **fileList是(或者可以,反正)在功能上是相同的。在C中,如果你傳遞或返回數組,你應該(可能)只使用指針。在某些情況下,它允許使用數組(即,如果數組的長度在編譯時已知),但它(在我看來)更容易適應指針。

此外,這個問題已經或多或少得到回答已:Declaring a C function to return an array

+0

其實他們在我的情況是不一樣的。 我需要發送這個fileList到qsort函數,它需要事先知道數組中每個元素的大小。 所以可變大小的字符串不是一個選項。 – kBisla

+0

指針可以指向固定大小的內存區域,'fileList [i] [j]'語法仍然可以工作。如果您將'qsort'函數更改爲接受'char **',它應該仍然按預期工作。 – CmdrMoozy

+0

@CmdrMoozy OP不知道他/她在re qsort中談論的是什麼......看到他/她最近的問題。希望他/她從中學到了一些東西。 –