2016-05-14 228 views
3

我需要創建一個字符串數組(動態)。 我發送一個指針指向函數,但在函數中我得到了錯誤。指針指向參數中的指針C

這是函數:

void CheckFilesInFolder(char* pathOfFolder, char*** namesFiles); 

我打電話這樣的功能:

char** namesFiles = NULL; 
CheckFilesInFolder("Debug", &namesFiles); 

而且在功能我這樣做的malloc,當I = 1的突破。

*namesFiles = (char**)malloc(*namesFiles, 10 * sizeof(char*)); 
int i = 0; 
for (i = 0; i < 10; i++) 
{ 
    *(namesFiles[i]) = (char*)malloc(MAX_FILE_NAME); 
} 
+4

[請參閱此討論,爲什麼不在'C'中投射'malloc()'和家族的返回值。](http://stackoverflow.com/q/605845/2173917)。 –

+5

你需要'(* namesFiles)[i]'。 –

+3

你得到了什麼錯誤? –

回答

4

malloc只需要1 size_t的說法。 更改此:

*namesFiles = (char**)malloc(*namesFiles, 10 * sizeof(char*)); 

這樣:

*namesFiles = (char**)malloc(10 * sizeof(char*)); 

讓我知道可能發生的任何其他錯誤的。

此外,如果您需要將指針傳遞給調用者,爲什麼不通過傳遞指針的地址作爲參數來返回它?

像這樣: char** CheckFilesInFolder(char* pathOfFolder);

,並在功能上做一些事情,如:

char** namesFiles = (char**)malloc(10 * sizeof(char*)); 
//(...) 
return namesFiles; 

打電話,只是這樣做: char** namesFiles = CheckFilesInFolder("Debug");

我相信這是最好的辦法。

EDIT 1.0 要回復從「烷」的評論,在這裏是通過爭論,而不是我的(簡單)的建議,解決這一問題的指針的char *的數組來返回字符的方式**:

調用該函數是這樣的:

char** namesFiles; 
CheckFilesInFolder("Debug", &namesFiles); 

在函數內部:

*namesFiles = (char**)malloc(10 * sizeof(char*)); 
int i; 
for (i = 0; i < 10; i++) 
    (*namesFiles)[i] = (char*)malloc(MAX_FILE_NAME); 

函數聲明:

void CheckFilesInFolder(char* pathOfFolder, char*** namesFiles); 

使用這是你真的需要做到這一點使用的參數,例如,如果你想調用這個函數的並行線程的程序。

+0

你說得對。忘記了他正在使用char ***。編輯。不過這是一個不必要的複雜因素。他可以返回char **。感謝您的警告 –

+0

我覺得這個答案沒有指出OP代碼的相關問題。 – alk

+0

@alk好的。很公平。它現在正在回答這個問題。 –