Вопреки распространенному мнению, не все программисты одинаково невнимательны к тому, что пишут. gets()
всегда будет стандартным в C90, и его поместили в библиотеку по нескольким веским причинам. Она не более «опасна», чем любая другая строковая функция, если ее использовать надлежащим образом, например, в примерах программ, документации, подмостах модульного теста, домашних заданиях и т. Д.
Более того, gets()
повышает удобочитаемость таким способом, которого fgets()
никогда не будет. И никогда не нужно прерывать ход мыслей, чтобы посмотреть, в каком порядке приводить свои аргументы.
Следующий обходной путь использует мою другую любимую функцию для удаления новой строки. :)
#define gets GET_LOST
#include "stdio.h"
#undef gets
#include "limits.h"
char *gets(char *s)
{
return strtok(fgets(s, INT_MAX, stdin), "\n");
}