Чтение информации из текстового файла для кода телефонной книги на C
Мне нужно прочитать имена, фамилии и номера телефонов из текстового файла и сохранить их в структуре для приложения телефонной книги. Проблема заключается в том, что, не зная, сколько строк в тексте, как мне организовать свой код так, чтобы он читал точное количество строк, которое включает текст.
2 ответа
Простой трюк - прочитать файл дважды. В первый раз подсчитываешь количество строк. Затем вы выделяете место для хранения. Затем вы снова читаете и заполняете только что отведенное место.
На самом деле зависит от вашего определения "читает точное количество строк".
[1] Weather Vane заявил в комментарии, while/fgets - самый безопасный способ работы... читайте, пока не встретится EOF, затем остановитесь.
[2] Если информация поступает из обычного файла, вы можете stat(2) файл, чтобы получить его точный размер перед чтением.
[3] (худшее решение из-за риска ошибок, если вы угадаете неверно): выделите буфер гораздо большего размера, чем необходимо, и прочитайте все строки за одно массовое чтение. В целях безопасности я бы обнулял буфер перед чтением и читал на один байт меньше, чем выделено. "Read" вернет точное количество байтов, если не будут возвращены все байты, запрошенные в read(), что означает, что вы ошиблись и переполнили буфер. Вероятность того, что вы прочитаете его точно, а байтов больше нет, очень мала.