The gets() function
reads bytes from the standard input stream (see intro(3)), stdin, into the array pointed to by s, until a newline character
is read or an end-of-file condition is encountered. The newline character is discarded and the string is terminated with a null byte.
If the length of an input line exceeds the size of s, indeterminate behavior may result. For this reason, it is strongly recommended that gets() be avoided in favor of fgets().
The fgets() function reads bytes from the stream into the array pointed to by s, until n-1 bytes are read, or a newline character is read and transferred to s, or an end-of-file condition
is encountered. The string is then terminated with a null byte.
The fgets() function may mark the st_atime field of the file associated with stream for update. The st_atime field will be marked for update by the first successful execution of fgetc(3C), fgets(), fgetwc(3C), fgetws(3C), fread(3C), fscanf(3C), getc(3C), getchar(3C), gets(), or scanf(3C) using stream that returns data not supplied by a prior call to ungetc(3C) or ungetwc(3C).