一般に、C言語で文字列の配列を扱うには、「ポインタへのポインタ」を使います。
まずポインタ群を入れる配列を用意した上で、その配列の個々のポインタに文字列を登録していくわけです。
例示するとこんな感じで:
void main()
{
char **array=func();
printf("%s",array[0]);
printf("%s",array[1]);
・
・
・
}
char **func()
{
char **ret;
ret=(char **)malloc( sizeof(char *) * 10 ); <-文字列10個ぶんのポインタ配列を確保
ret[0]=(char *)malloc( .... ); <-最初の文字列のバッファを確保
strcpy(ret[0] , ..... ); <-最初の文字列をコピー
ret[1]=(char *)malloc( .... ); <-2つ目の文字列のバッファを確保
strcpy(ret[1] , ..... ); <-2つ目の文字列をコピー
・
・
・
return ret;
}
ご質問の例の場合も同様に処理することは可能ですが、fts_read()で得られる要素数の総数が事前にわからないのが難点になります。上記例で最初にretに設定するポインタ配列の総数が事前決定できないのです。
この場合の解決方法はいくつか考えられます。
いずれにしても、少々面倒な実装をする必要が生じます。
C言語で書く場合、こんな感じかと。
「realloc()を使ってポインタ配列を動的に拡張しつつ登録する。」の方針を使ってます。サイズは倍々ゲームで。
char **getPathList(char *path){
FTS* fts;
FTSENT *entry;
int size = 10;
char **retArray = malloc(sizeof(char *)*size)
fts = fts_open(path, 0, NULL);
int i;
for(i=0;entry = fts_read(fts);i++) {
if(i==size){
size *= 2;
retArray = realloc(retArray,sizeof(char *)*size)
}
retArray[i] = malloc(entry->fts_pathlen);
memcpy(retArray[i],entry->fts_path,entry->fts_pathlen);
}
fts_close(fts);
return retArray;
}
ここまで書いといてなんですが、
c言語とobjective-cを混同していません?