2005-05 / 2005-05-25

前のエントリ: Perl の略は [perl]
次のエントリ: 独習C 読破 [本]

ファイルIOで1行ずつの処理は
2005-05-25-1 / カテゴリ: [programming][c] / [permlink]

fgets を使って、\nまで読んだのか、\0まで読んだのか、そうでないのかをチェック
  input_buf = (char *)malloc(sizeof(char) * cur_mem_size);
  if (input_buf == NULL) {
    perror("memory alocate error(input_buf)\n");
    exit(1);
  }

  // EOF まで読み込み
  while (!feof(fp)) {
    if (fgets(read_buf, INPUT_BUFFER, fp)) {
      strcat(input_buf, read_buf);

      if (!feof(fp) && input_buf[strlen(input_buf) - 1] != '\n') {
        // EOFでなく かつ 行の途中までしか読めなかった
        cur_mem_size += INPUT_BUFFER;
        printf("%d\n", cur_mem_size);
        input_buf = (char *)realloc(input_buf, sizeof(char) * cur_mem_size);
        if (input_buf == NULL) {
          perror("realloc error\n");
          exit(1);
        }
      }
      else {
        // EOFまたは行末まで読んだ
        printf("[%s]", input_buf);  // 行に対する処理
        input_buf[0] = '\0';
      }
    }
  }
cur_mem_size ずつファイルを読み込み、行末までよんでなかったら、バッファを realloc して更に読む、というやり方。こんなんで良いのだろうか。
前のエントリ: Perl の略は [perl]
次のエントリ: 独習C 読破 [本]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12