Функция gets была сначала устарела на C99 и, наконец, удалена в C11. Однако в C-библиотеке нет прямой замены.
fgets() не является замещающей заменой, поскольку он не разделяет окончательный '\n', который может отсутствовать в конце файла. Многие программисты тоже ошибаются.
Существует один слой для удаления строки: buf[strcspn(buf, "\n")] = '\0';, но это нетривиально и часто вызывает объяснение. Это может быть и неэффективным.
Это контрпродуктивно. Многие новички по-прежнему используют gets(), потому что их учителя хромают или их устаревшие устаревшие.
Microsoft предложила gets_s() и многие связанные с ней функции, но она не обрезает лишние строки молчанием, поведение в этом нарушении ограничений не совсем просто.
Как BSD, так и GNU libc имеют getline, стандартизованный в POSIX, который выделяет или перераспределяет буфер через realloc...
Каков наилучший способ научить новичков об этом беспорядке?