将字符串CStoring到c中的数组中

时间:2017-02-05 23:06:02

标签: c arrays string dirent.h

我正在尝试读取目录中的文件并将每个文件名存储在字符串数组中。我无法让它为我的生活而工作。这是功能:

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;
}

1 个答案:

答案 0 :(得分:1)

您的代码存在两个问题。主要的一点是,您尝试将字符串存储在指向字符的1000个元素数组中。指向char的指针不足以存储字符串,它实际上需要指向一些内存。您可以通过多种方式解决此问题,请考虑将 strcpy 功能更改为 strdup - 这将为您分配内存。或者您需要将fileStringArray更改为chars数组的数组( char fileStringArray [1000] [100] )。

第二个问题是 i ,如果你真的想要在数组中前进,你应该无条件地增加它。

另外,如果你能发布完整的例子会很好,所以我不必猜测要包括的标题。