ついでにどなたかご教授お願いします。

#include <stdio.h>
main()
{
FILE *fp;
char buf[100];

printf("ファイル名を入力しなさい");
gets(buf);

  /*  getsならファイルに書き込みできるけど
   *  fgets(buf,100,stdin)ならファイルに書き込みできません。
   */
fp=fopen(buf,"w");


 if(fp == NULL)
 {
fprintf(stderr,"エラーです");
 }

fprintf(fp,"123");
fclose(fp);

}

(getsのbuf)と(fgetsのbuf)は、何がどう違うのですか?