2017-02-05 11 views
0

Я пытаюсь прочитать файлы в каталоге и сохранить каждое имя файла в массиве строк. Я не могу заставить его работать на всю жизнь. Вот эта функция:CStoring строки в массив в 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; 
} 
+1

'fileStringArray' - это массив * неинициализированных указателей *. Любой доступ к этим значениям (т. Е. 'Strcpy (fileStringArray [i-2], file-> d_name)') приводит к Undefined Behavior. Выделите память для каждой строки, которую вы хотите сохранить первым. – kaylum

+0

Вы читаете книгу C? Статистически, я ставлю свою ставку на «нет», так как кажется, что люди, которые читают книги, не имеют такой основной проблемы ... – Sebivor

ответ

1

В коде есть две проблемы. Главное, что вы пытаетесь сохранить ваши строки в массиве 1000 элементов указателей на символы. Указатель на char недостаточно для хранения строки, на самом деле нужно указать на некоторую память. Вы можете решить эту проблему по-разному, подумайте об изменении функции strcpy на strdup - который выделит вам память. Или вам нужно изменить свой файлStringArray как массив массивов символов (char fileStringArray [1000] [100]).

Вторая проблема заключается в том, что i, вы должны постепенно увеличивать ее, если вы действительно хотите продвинуться в своем массиве.

Также было бы неплохо, если бы вы могли разместить полный пример, поэтому мне не нужно угадывать заголовки для включения.

+0

жаль, что я не хочу публиковать остальную часть моего проекта, заголовки heres: #include #include #include #include #include #include #include cowchin12