перебор каждой строки файла на C

#c #file-io

#c #file-io

Вопрос:

Мне интересно, как вы можете перебирать каждую строку файла вот код, который у меня есть на данный момент:

 FILE *todoFile;
todoFile = fopen("./todo.txt", "r");

if (todoFile != NULL) {

} else {
    printf("ERROR");
}
  

Комментарии:

1. Вы исследовали написание средства вычисления регулярных выражений? Или в библиотеке? Если да, то какие именно? Мы здесь не для того, чтобы делать вашу работу за вас. Только для того, чтобы немного подтолкнуть вас, когда вы застряли.

2. Я могу сам разобраться в регулярных выражениях, просто главное — как выполнять цикл над каждой строкой

Ответ №1:

Идиоматический способ чтения файла построчно до тех пор, пока он не закончится, это

     /* assume line is a char array */
    while (fgets(line, sizeof line, handle)) {
        size_t len = strlen(line);
        if (len amp;amp; (line[len - 1] != 'n')) {
            /* incomplete line */
        }
        /* possibly remove trailing newline ... and */
        /* deal with line */
    }
  

Комментарии:

1. Что должно line быть? (извините, я действительно новичок в C)

2. @errorhandler обычно представляет собой char массив, как char line[100]; говорит @pmg в своих комментариях над циклом while.

3. char line[500]; определите строку с пробелом для строк длиной до 499 символов: помните, что «строки» в C включают завершающий нулевой байт.

4. getline имеет недостаток: если он исчерпывает память до поиска новой строки, нет способа восстановить частично прочитанную строку. Также нет способа предотвратить засорение всей памяти вредоносным вводом…

5. @errorhandler: установите свой лимит строк примерно на 4096 (не ничтожный и легко превышаемый 256). POSIX <limits.h> устанавливает ограничение LINE_MAX, а минимально допустимым значением для него является _POSIX2_LINE_MAX, которое является значением 2048. Сколько гигабайт оперативной памяти имеется на вашем компьютере? Он не заметит 4 КБ!