Если вы действительно не можете сделать какое-либо безопасное предположение о длине строки, вам следует использовать getline ().Эта функция принимает три аргумента: указатель на строку (char **), указатель на int, содержащий размер этой строки, и указатель файла и возвращает длину прочитанной строки.getline () динамически распределяет пространство для строки (используя malloc / realloc), и, таким образом, вам не нужно знать длину строки и нет переполнений буфера.Конечно, это не так удобно, как fscanf, потому что вам нужно разделить строку вручную.
Пример:
char **line=NULL;
int n=0,len;
FILE *f=fopen("...","r");
if((len=getline(&line,&n,f)>0)
{
...
}
free(line);
fclose(f);