ファイヤープロジェクト
標準入出力ライブラリによるファイル操作 その2
2003-07-20T15:13+09:00   matsu
標準入出力ライブラリによるファイル操作についてもっと.
前回と今回のページの題として「ファイル操作」は適切なのだろうか.とにかく今回は,fseek,fgetc,fputc,fgets,fprintfを試用してみた.
#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *buf;
  int i=0;

  FILE *file;
  file=fopen("hoge","r");
  /* lseekのファイルストリーム版 */
  /* SEEK_SETは絶対位置を意味し,2がoffset */

  fseek(file,2,SEEK_SET);

  buf=malloc(3*sizeof(char));

  /* ストリームfileから一文字読み込む */
  *buf=(char)fgetc(file);
  /* ストリームfileからさらに一文字読み込む */
  *(buf+1)=(char)fgetc(file);
  /* ストリームfileからさらに一文字読み込む */
  *(buf+2)=(char)fgetc(file);
  /* ストリームstdoutに一文字書き出す */
  fputc((int)*buf,stdout);
  /* ストリームstdoutにさらに一文字書き出す */
  fputc((int)*(buf+1),stdout);
  /* ストリームstdoutにさらに一文字書き出す */
  fputc((int)*(buf+2),stdout);

  free(buf);

  malloc(10*sizeof(char));
  /* ストリームstdinから10文字読み込む */
  fgets(buf,10,stdin);
  /* 受けた入力を逆順に表示 */
  for(i=10;i>=0;i--){
    /* ストリームstdoutに書式付き出力を行う */
    fprintf(stdout,"%c",*(buf+i));
  }
  fprintf(stdout,"\n");

  exit(0);
}
manによるとgetsはバッファオーバーフローの原因になるのでfgetsを使えと書いてある.そういえば研修中にgetsが使えないってはまってる人がいた気がする.環境によってはgetsを使うとコンパイル段階でエラーを吐かれるようだ.なんだっけ?なんか,そういうセキュリティ的にやばいライブラリを使っていないかどうかをチェックするツールがあるらしい.
matsu(C)
Since 2002
Mail to matsu