вы можете динамически распределять массив символов с помощью malloc (), а затем читать символ из файла с помощью fgetc (). когда вы достигаете конца буфера, вы вызываете realloc (), чтобы расширить буфер, а затем продолжаете чтение символов. таким образом, единственная ошибка, которую вы можете иметь, это ошибка «недостаточно памяти».
char *buffer = malloc( 200 );
unsigned int buffer_size = 200;
unsigned int current = 0;
char read;
do
{
read = fgetc( stream );
if ( current >= buffer_size - 1 )
{
buffer_size += 200;
buffer = realloc( buffer, buffer_size );
}
buffer[current++] = read;
}
while ( read != '\n' );
buffer[current++] = '\0';
(отсутствует в приведенном выше коде: проверка возвращаемого значения realloc для обработки состояния нехватки памяти)