私はディレクトリ内のファイルを読み込み、各ファイル名を文字列の配列に格納しようとしています。私はそれを私の人生のために働かせることはできません。関数は次のとおりです。Cの配列に文字列を保存する
char *readFile(char *dir){
char *fileStringArray[1000];
DIR *dirPointer;
int file_count = 0;
struct dirent *file;
struct stat fileType;
int i = 0;
if ((dirPointer = opendir(dir)) == NULL){
printf("Directory not found, try again\n");
return NULL;
}else{
printf("Reading files in directory\n");
while((file = readdir(dirPointer)) != NULL){ //iterate through contents of directory
stat(dir, &fileType);
if(i > 1){ //ignore . and .. directories that appear first
file_count++;
printf("%s\n", file->d_name);
strcpy(fileStringArray[i-2], file->d_name); //crashes, replace
//with [i] to not crash, but i-2 makes more sense to me
//fileStringArray[i-2] = &file->d_name; alternate idea
}
else{
i++;
}
}
int j;
for(j = 0; j < file_count; j++){
printf(":::%s\n", fileStringArray[j]); //print the string array
}
}
printf("Done reading\n\n");
closedir(dirPointer);
return dir;
}
'fileStringArray'は、*初期化されていない*ポインタの配列です。これらの値( 'strcpy(fileStringArray [i-2]、file-> d_name)')にアクセスすると、未定義の振る舞いになります。最初に保存する文字列ごとにメモリを割り当てます。 – kaylum
C本を読んでいますか?統計的には、本を読む人にはこの種の基本的な問題がないように思われるので、私は「いいえ」に私の賭けをします... – Sebivor