2016-05-14 11 views
3

文字列(動的)の配列を作成する必要があります。 関数へのポインタへのポインタを送信しますが、関数にエラーがあります。Cのパラメータのポインタへのポインタ

これは、関数である:

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

私はそのように機能するために呼び出す:

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

をAND関数で、私はそれに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

['malloc()'と 'C 'のファミリの戻り値をキャストしない理由についてのこのディスカッションを参照してください。](http://stackoverflow.com/q/605845/2173917)。 –

+5

'(* namesFiles)[i]'が必要です。 –

+3

どうしたらいいですか? –

答えて

4

mallocのみ1つのsize_t引数を取ります。私が発生する可能性のある他のエラーを知ってみましょう

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

:これまで

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

:これを変更し 。

また、ポインタを呼び出し元に渡す必要がある場合、ポインタのアドレスを引数として渡す代わりにポインタを返すのはなぜですか?

ようなので: char** namesFiles = CheckFilesInFolder("Debug");

私はこれが最善の方法であると信じて:ちょうどこれを行う、呼び出すに

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

char** CheckFilesInFolder(char* pathOfFolder);

と機能には次のように行います。

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); 

関数宣言:これはあなたがのpthreadのルーチンとして、この関数をコールする場合、あなたが本当に例えば、この使用して引数を行う必要がある

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

使用。

+0

あなたは正しいです。彼はchar ***を使っていたのを忘れてしまった編集されました。しかし、それは不要な合併症です。彼はただチャーを返すことができた**。警告ありがとう –

+0

私は、この回答がOPのコードに関連する問題を指していないと感じています。 – alk

+0

@alk Ok。けっこうだ。それはまさに今質問に答えています。 –

関連する問題