Чтение информации из текстового файла для кода телефонной книги на C

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

2 ответа

Простой трюк - прочитать файл дважды. В первый раз подсчитываешь количество строк. Затем вы выделяете место для хранения. Затем вы снова читаете и заполняете только что отведенное место.

На самом деле зависит от вашего определения "читает точное количество строк".

[1] Weather Vane заявил в комментарии, while/fgets - самый безопасный способ работы... читайте, пока не встретится EOF, затем остановитесь.

[2] Если информация поступает из обычного файла, вы можете stat(2) файл, чтобы получить его точный размер перед чтением.

[3] (худшее решение из-за риска ошибок, если вы угадаете неверно): выделите буфер гораздо большего размера, чем необходимо, и прочитайте все строки за одно массовое чтение. В целях безопасности я бы обнулял буфер перед чтением и читал на один байт меньше, чем выделено. "Read" вернет точное количество байтов, если не будут возвращены все байты, запрошенные в read(), что означает, что вы ошиблись и переполнили буфер. Вероятность того, что вы прочитаете его точно, а байтов больше нет, очень мала.

Другие вопросы по тегам