2016-08-21 3 views
0

Я пытаюсь создать-структуру для хранения файла и datatime файлов из директории дляКак создать структуру для хранения datetime и имени файла из каталога на языке C?

if(dir) 
{ 
    struct dirent *file; 
    struct stat info_; 
    char buf[256]; 
    int N=0; 

    struct element 
    { 
     char *name; 
     time_t date; 
    }; 
    struct element database[N]; 

    while ((file=readdir(dir)) != NULL) 
    { 
    if(file->d_name[0] != '.') 
    { 
    strcpy(database->name, file->d_name); 
    database->date=info_.st_mtime; 
    N++; 
    } 
    } 


    int i; 
    for(i=0; i<N; i++) 
    { 
     printf("%s",database->name); 
     printf("%d",database->date); 
    } 

Я хотел бы также, чтобы отсортировать-структуру, но Это другая проблема, которая придет после этого. Программа дает мне ошибку сегментации. Я не очень уверен, что структура верна. Как я могу его изменить? Thx

+0

'int N = 0; ... struct element database [N]; 'неудивительно, почему он сбой ... –

ответ

0

Ой, я думаю, это очевидно, почему это дает вам segfault.

int N=0; 
struct element database[N]; 

Теперь внимательно следите за тем, что вы наделали. Вы создали массив с 0 элементами, и вы пытаетесь сохранить что-то в нем.

strcpy(database->name, file->d_name); 

Ваш массив должен содержать достаточно места для хранения имени, которое вы хотите сохранить в нем.

Лучший способ достичь этого - использовать динамически расположенное пространство с malloc();

+0

ОК, но это все равно не работает. Считаете ли вы, что 'strcpy (database-> name, file-> d_name);' и 'database-> date = info_.st_mtime;' используются для хранения данных правильно? – Leonnn

+0

Я использовал 'char * name [20];' но он снова дал мне segfault – Leonnn

+0

Я изменил объявление в 'struct element * database = malloc (sizeof (struct element) * tbuffer);' но я думаю, что настоящая проблема здесь: 'strcpy (database-> name [20], s_dir-> d_name);' – Leonnn