0

ファイルから読み取っている文字の単語を組み合わせようとしています。問題はキャラクターの組み合わせです。私がやっている方法は次のとおりです。

char *charArr
 while( (readChar = fgetc(fp)) != EOF ){
 charArr[i] = readChar;
 i++;
}
4

1 に答える 1

2

まず、charArrバッファにメモリを割り当てる必要があります。書かれているように、charArr最初は意味のある場所を指していません:

char *charArr = malloc(SOME_INITIAL_SIZE);

SOME_INITIAL_SIZE は、ほとんどのケースを処理するのに十分な大きさです。十分な大きさでない場合は、 を使用してバッファを拡張する必要がありますrealloc()。これは、バッファの現在のサイズも追跡する必要があることを意味します。

size_t currentSize = 0;
size_t i = 0;
char *charArr = malloc(SOME_INITIAL_SIZE);
if (!charArr)
{
  /**
   * memory allocation failed: for this example we treat it as a fatal
   * error and bail completely
   */
  exit(0);
}

currentSize = SOME_INITIAL_SIZE;
while ((readchar = fgetc(fp)) != EOF)
{
  /**
   * Have we filled up the buffer?
   */
  if (i == currentSize)
  {
    /**
     * Yes.  Double the size of the buffer.
     */
    char *tmp = realloc(charArr, currentSize * 2);
    if (tmp)
    {
      charArr = tmp;
      currentSize *= 2;
    }
    else
    {
      /**
       * The realloc call failed; again, we treat this as a fatal error. 
       * Deallocate what memory we have already allocated and exit
       */ 
      free(charArr);
      exit(0);
    }
  }
  charArr[i++] = readchar;
}

配列を文字列として扱う場合は、0 ターミネータを追加することを忘れないでください。

編集

しかし、より大きな問題は、データをフィルタリングする前に、ファイルの内容全体をメモリに読み込まなければならないと考える理由です。フィルターをかけてみませんか?

于 2009-12-29T16:24:30.263 に答える