Когда gets
последний раз поддерживался (хотя и устарел) стандартом C, он имел следующее описание (§ 7.19.7.7, функция gets
):
Функция gets читаетсимволы из входного потока, на которые указывает stdin
, в массив, на который указывает s
, до тех пор, пока не встретится конец файла или не будет прочитан символ новой строки.Любой символ новой строки отбрасывается, и нулевой символ записывается сразу после того, как последний символ прочитан в массив.
Это означает, что если строка прочитана из stdin
было ровно столько, сколько или больше, чем массив, на который указывает s
, gets
все равно (попытался бы) добавить нулевой символ в конец строки.
Даже если вы находитесь настандартную версию компилятора или C, которая поддерживает gets
, не используйте его.fgets
намного безопаснее, поскольку требует размера буфера, в который записывается как параметр, и не будет записывать после его конца.Другое отличие состоит в том, что он оставит новую строку в буфере, в отличие от gets
did.