#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 КБ!