2016-05-08 4 views
-2

Как я могу прочитать несколько строк (приблизительно 5000 строк) из текстового файла и сохранить их все в одном массиве строк? У меня уже есть код, который работает гладко, но он не работает так, как предполагалось. Я получаю только последнюю строку файла, хранящегося в массиве.Прочитать все строки из файла в массив

int main(){ 
    int n; 
    char line[401]; 
    char string[10000]; 
    fr = fopen ("fila1b.txt", "rt"); 
    while(fgets(line, 400, fr) != NULL){ 
    strcat(string, line); 
    } 
    fclose(fr); 
    printf("%s\n", string); 
    } 

EDIT: Я обновил код с некоторыми изменениями. Теперь я использую функцию strcat, чтобы вставить содержимое строки, полученной fgets, в исходный массив строк. Он работает, по-видимому. Но когда я печатаю «строку», он печатает только первые 300 строк, а затем дает мне ошибку сегментации.

+2

Каждый вызов 'gets' может перезаписать содержимое' line'. – ForceBru

+1

Ну, * что-то нужно, чтобы зайти в тело этого цикла while ... возможно, код, который помещает содержимое строки в массив? – SevenBits

+0

Нет массива для строк, и весь код отсутствует. Это не сайт «написать мой код». Что у вас есть, какова ваша ** конкретная проблема? – Olaf

ответ

0

Обычный способ просто чавкать все символы с read или fread:

#define MIN_CHUNK_SIZE (1024) 

char *read_file(FILE *f) { 
    size_t n_read_total = 0; 
    size_t buf_size = MIN_CHUNK_SIZE + 1; // Allow space for nul terminator. 
    char *buf = safe_malloc(buf_size); 
    size_t n_avail; 
    do { 
    n_avail = buf_size - n_read_total - 1; 
    if (n_avail < MIN_CHUNK_SIZE) { 
     // Double the buffer size. 
     n_avail += buf_size; 
     buf_size += buf_size; 
     buf = safe_realloc(buf, buf_size); 
    } 
    size_t n_read = fread(buf + n_read_total, 1, n_avail, f); 
    n_read_total += n_read; 
    } while (n_read == n_avail); 
    buf[n_read_total] = '\0'; 
    return safe_realloc(buf, n_read_total + 1); 
} 
Смежные вопросы