As we have seen in the last section, when using functions
    gets and scanf to read in a sequence of
    characters, your program will eventually fail, because these functions do
    not control if the user types more characters than the maximum size of the
    array that has to hold them. To avoid this, C has two more functions which
    make the user input reading safer: fgets and
    getline.
fgets function
      The syntax of the fgets function is the
      following:
#include <stdio.h> char *fgets(char *s, int n, FILE *stream);
Here s references a character array that is
      used to store characters read from the opened file pointed to by
      stream.  n specifies the maximum number of array
      elements.  The function reads a sequence of up to n-1
      characters from the file referenced by stream, and writes it
      to the buffer indicated by s, appending the string terminator
      character '\0'. If a newline character('\n') is read, it also stops and
      the string written to the buffer is terminated after the newline character
      (so this character is also included).  The function returns the pointer to
      the string buffer if anything was written to it, or a null pointer if an
      error occurred or if the file position indicator was at the end of the
      file.  If you have entered more characters than what the function has the
      capacity to read, you will have to clear the buffer in order not to get
      those remain characters in the next fgets call.
fgets is safer than gets, but
      this function involved a little more work basically because of two
      issues. One is that, if you have entered more characters than what the
      function has the capacity to read, you will have to clear the buffer in
      order not to get those remain characters in the next fgets
      call. The second issue is that you have to get rid of the newline
      character which fgets stores in the array.