fgets関数は、ファイルポインタで示されるストリームから1行入力します。ただし、1行の長さが、指定した長さよりも長い場合は、「指定した長さ – 1」文字(バイト)分入力します。入力したデータは最後にヌル文字(’\0’)が追加されて、文字列になっています。

#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);

sは入力したデータを格納するバッファ領域を指定します。
sizeは入力する行の最大長(バイト単位)を指定します。最大「size – 1」文字分入力します。
*streamはfopen関数で取得した、ファイルポインタを指定します。

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

fgets関数は入力したデータの最後にヌル文字(’\0’)を追加して、文字列として返しますので、第2引数のsizeは実際に入力するデータの最大長より、1文字分多い値を指定します。

プログラム 例

#include <stdio.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), 'r')) != NULL) {
      while(fgets(buff, SIZE, fp) != NULL) {
        printf('%s', buff);
      }

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

  return return_code;
}

例の実行結果

$ ./fgets.exe fgets.c
#include <stdio.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), 'r')) != NULL) {
      while(fgets(buff, SIZE, fp) != NULL) {
        printf('%s', buff);
      }

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

  return return_code;
}
$