gets関数は、標準入力から1行入力します。この関数は入力データの長さを知ることなく入力するため、用意したバッファの終わりを越えて書き込む可能性があります。特に問題がなければ、fgets関数を使用した方がよいでしょう。

#include <stdio.h>
char *gets(char *s);

sは入力したデータを格納する領域を指定します。
*streamはfopen関数で取得した、ファイルポインタを指定します。

戻り値として、正常に入力できた場合は入力データ(第1引数のsと同じ)が、ファイルの終わりや、エラーの場合はNULLの値を返します。

gets関数は入力したデータの末尾の改行文字やEOFは、ヌル文字(’\0’)に置き換えます。

プログラム 例

#include <stdio.h>
#include <string.h>
#define SIZE 1024

int main(int argc, char **argv)
{
  FILE    *fp;
  char    buff[SIZE];
  int     return_code = 0;

  if (argc == 2) {
    if ((fp = fopen(*(argv + 1), 'w')) != NULL) {
      while(gets(buff) != NULL) {
        /* 改行文字を付加して出力 */
        fputs(strcat(buff, '\n'), fp);
      }

      fclose(fp);
    }
    else {
      printf('ファイルのオープンに失敗しました\');
      return_code = 1;
    }
  }
  else {
    printf('実行時引数の数が不当です\n');
    return_code = 2;
  }

  return return_code;
}

例の実行結果

$ ./gets.exe temp1.txt
Hello World!!.
Bye.
$
$ cat temp1.txt
Hello World!!.
Bye.
$