我正在尝试读取目录中的文件并将每个文件名存储在字符串数组中。我无法让它为我的生活而工作。这是功能:
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;
}
答案 0 :(得分:1)
您的代码存在两个问题。主要的一点是,您尝试将字符串存储在指向字符的1000个元素数组中。指向char的指针不足以存储字符串,它实际上需要指向一些内存。您可以通过多种方式解决此问题,请考虑将 strcpy 功能更改为 strdup - 这将为您分配内存。或者您需要将fileStringArray更改为chars数组的数组( char fileStringArray [1000] [100] )。
第二个问题是 i ,如果你真的想要在数组中前进,你应该无条件地增加它。
另外,如果你能发布完整的例子会很好,所以我不必猜测要包括的标题。