char*[] makeList(char *path, int *noOfFiles);
我認爲我的意圖很明確,但這不起作用。如何正確聲明這個函數?
P.S.我需要存儲在一個名爲char *fileList[260]
變量的返回值,而不是char** fileList.
char*[] makeList(char *path, int *noOfFiles);
我認爲我的意圖很明確,但這不起作用。如何正確聲明這個函數?
P.S.我需要存儲在一個名爲char *fileList[260]
變量的返回值,而不是char** fileList.
這是不可能的,除非它被包裹在裏面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
。它可以返回一個結果,指出如果有更多的文件要返回,那麼它需要一個更大的數組。
char *fileList[]
和char **fileList
是(或者可以,反正)在功能上是相同的。在C中,如果你傳遞或返回數組,你應該(可能)只使用指針。在某些情況下,它允許使用數組(即,如果數組的長度在編譯時已知),但它(在我看來)更容易適應指針。
此外,這個問題已經或多或少得到回答已:Declaring a C function to return an array
也許你的意思是「...應該確保它不會**寫更多...」 –
@洛倫佐多納蒂:是的,謝謝! – jxh