Функции читают символы из стандартного ввода до тех пор, пока не будут найдены символы EOF или символы новой строки.
Вторая проверка гарантирует, что единственный символ новой строки будет помещен в массив char. EOF не должен встречаться в правильной c-строке. Кроме того, если символ не является новой строкой, это означает, что мы могли бы заполнить нашу c-строку, и в этом случае мы не должны помещать в нее больше символов.
Обратите внимание, мы все еще добавляем '\ 0'. Мы позаботились о том, чтобы в нашей c-строке оставалось место для еще одного символа, поскольку мы используем декремент до исправления, который оценивается перед сравнением.