2012-03-28 14 views
4

const char *パスをfts_openに渡すにはどうすればよいですか?私はfilePathを渡したいと思います。const char *ポインタをfts_open()に渡す方法

+1

私はこのスレッドが受け入れ答えhttp://stackoverflow.com/questions/983376/recursive-folder-scanning-inとして良い例を持っていると思います-c – Mikhail

答えて

3

この単一パスをargv(タイプchar const **)パラメータにfts_openに渡す方法を知りたいと仮定します。このパラメータは、このように説明されています

のargv

は、ファイル階層を構成する1つ以上のパスに名前を付ける文字ポインタのNULLで終了する配列です。

したがって、要素のタイプがchar*である長さ2の配列を作成する必要があります。最初の要素にパスを入れ、2番目の要素にNULLを入れます。このように:

char const *argv[] = { path, NULL }; 

あなたは今fts_openargvを渡すことができます。

+2

それでも、fts_openは 'const char * const *'の代わりに 'char * const *'のみをとります: -/ –

+0

constポインタ以外のポインタを、constポインタを受け入れる関数に渡すことができます。 constの正確さでは、関数シグネチャは、関数が引数によって指されたデータを変更しないことを伝えています。この場合、 'fts_open'は' argv'の内容やその要素が指している値を変更しません。 – tomlogic

+0

しかし、私は元のバージョンではちょっとうんざりしていました。適切な 'const'修飾子を追加しました。それは、Helium3が二重間接を理解するのが難しくなっているのではないかと思う。解説のために、時には一度に1つの問題に集中する方が良い場合もあります。 –

0

fts_open()の最初の引数は、「ファイル階層を構成する1つ以上のパスを指定する文字ポインタのNULLで終了する配列」です。

だから、あなたはこのようにそれを渡すことができます。

char *pathlist[2]; 

pathlist[0] = filePath; 
pathlist[1] = NULL; 

fts_open(pathlist, ...); 
関連する問題