+ 3
puts() write to the standard output stream. fputs() allows you to write to a specified stream. Compare:
int puts(const char *str)
int fputs(const char *str, FILE *stream)
gets() is obsolete, just don't use it. It's bad because it doesn't care if you input more than what space is allocated to a c-string. fgets() on the other hand allows you to specify how many characters to get, so that you won't write to memory which does not belong to you.
char* gets (char* str)
char* fgets(char* str, int n, FILE* stream)
Ref sauce:
https://sites.google.com/site/jdsarodeprogramming/strings-in-c/scanf-vs-gets