Функции streaming IO, куда входят fopen, fclose, fread, fwrite, fputs и т.п., используют буферизированный ввод-вывод и разницы в скорости ты не заметишь. Ведь по сути - что указателем познать по байтам, что построчно читать из буфера - принцип и скорость одна. Зато расход памяти минимален и способ универсальный. Чтение же файла целиком для текста - излишество. Нет, это никто не запрещает, но смысла нет. Подсунет кто-нибудь (может быть и не со зла) твоей программе вместо конфига образ dvd размером гиг 8. Думаю, что после нескольких минут свопирования программа завершится с ошибкой.
Кстати, о расходе памяти. Ее надо экономить как воду - программа не одна на компе и всем хочется кушать.
На случай, если строка больше 1кБ, то есть решение только для GNU (glibc) - см. pinfo libc. Есть такая ф-ия getline.
size_t getline(char **LINEPTR, size_t *N, FILE *STREAM)
Эта ф-ия сама выделит столько памяти, сколько потребуется твоей строке: если буфер мал - она его увеличит, если память вообще не выделена - сама это сделает. Просто сказка, а не ф-ия. Обязательно прочти мануал перед использованием. Ф-ия работает с динамической памятью.