Ваша first()
функция сканирует весь представленный ей массив, все size
байта, независимо от присутствия ограничителя строки внутри. Поэтому, если входная строка короче предыдущей, ваша функция беспечно сканирует наложение второй строки на первую.
Чтобы остановить сканирование в конце строки, оторвитесь от петли, когда увидите терминатор:
for (j = 0; spaces[j] != '\0'; j++)
Вы также можете нарушить условие, при котором j
достигает или превышает size
(как дополнительное , а не альтернативное условие), но это не является действительно необходимым в вашем случае, поскольку вы можете положиться на fgets()
для предоставления этого терминатора в пределах количества байтов, указанных ему.