Если вы используете glibc, вы можете решить обе проблемы за один раз - используйте спецификатор формата %as
.
Он автоматически выделит строку, достаточно большую для хранения содержимого.
Как это:
char *first, *second;
scanf(fp, "%as %as\n", first, second);
Примечание: это расширение GNU!