ディレクトリ内のすべてのファイルをリストする次のコードがあります。私は各ep-> d_nameを配列に追加しようとしていますが、これまで試みてきたことはすべて機能していません。私はどのように進めるべきですか?Cの配列にep-> d_nameを挿入する方法
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/times.h>
#include <sys/wait.h>
int main (void){
DIR *dp;
struct dirent *ep;
dp = opendir("./");
int count = 0;
char *fileNames = calloc(256, sizeof(char));
if(dp != NULL){
while(ep = readdir(dp)){
printf("%s\n", ep->d_name);
count = count+1;
}
for (int i=0; i<count; i++){
fileNames[i] = ep->d_name;
}
closedir(dp);
}else{
perror("Couldn't open the directory");
}
return 0;
}
コードのこのビットは変更されませんする必要があります。
int main (void){
DIR *dp;
struct dirent *ep;
dp = opendir("./");
if(dp != NULL){
while(ep = readdir(dp)){
printf("%s\n", ep->d_name);
}
closedir(dp);
}else{
perror("Couldn't open the directory");
}
return 0;
}
あなたは何を試してみましたか?例を挙げてください。あなたのコードのどこにでも宣言された配列は見えません。私たちにもっと情報を与えてください。 – Bargros
'fileNames'変数が単一の文字列であることを意味しましたか?文字列の配列にしたくないのですか? –
ええ、それぞれの文字列は実際にはメモリ内のその文字列のデータへのポインタなので、複数の文字列を格納したい場合は、以下のようにchar *またはchar **へのポインタを持たなければなりません。 manページの 'scandir'の定義を見ると、さらに混乱します。自動的に割り当てられるchar **のアドレスを保存するので、2番目の要素は実際にchar **またはchar **の_pointer_です。 * '。そして、私はそれが割り当てた 'char **'配列の_addressを格納するために 'scandir 'を必要とするchar **の_address_を渡します。 –