0

そのため、この質問に対する答えを見つけることができませんでした。

次のいずれかがありますか?

  1. ポインターをインクリメントせずに、ポインターで文字を取得する fgetc に似た関数?

  2. または、その下のポインターをデクリメントせずに fpos_t オブジェクトをデクリメントする方法。(主にこの回答に興味があります)

C の場合。

4

1 に答える 1

4

次の 3 つのオプションがあります。

1) ftell / fseekを使用する

例:

  FILE * pFile;
  char c1, c2;
  long offset;
  pFile = fopen ( "example.txt" , "r" );
  offset = ftell(pFile);
  c1 = fgetc(pFile);
  fseek ( pFile , offset , SEEK_SET );
  c2 = fgetc(pFile);
  /* result: c1 == c2 */

(注意: バイナリ ストリームの場合は、使用することもできますがfseek(pFile, -1, SEEK_CUR)、テキスト モードの場合は、1 つの文字を取得すると、ポインターが複数の位置に進む可能性があることに注意してください)。

2) fgetpos / fsetpos を使用する

例:

  FILE * pFile;
  fpos_t position;
  char c1, c2; 
  pFile = fopen ("example.txt","r");
  fgetpos (pFile, &position);
  c1 = fgetc(pFile);
  fsetpos (pFile, &position);
  c2 = fgetc(pFile);
  /* result: c1 == c2 */

3) ungetを使用する

  FILE * pFile;
  char c1, c2;
  c1 = fgetc(pFile);
  ungetc(c1, pFile);
  c2 = fgetc(pFile);
  /* result: c1 == c2 */

これらの方法のどれがより効果的かは、プラットフォームと実装に依存します。たとえば、フードの下で、ungetcたとえば、現在のチャンクを現在のポイントまで再読み取りする可能性があります。または、メモリ バッファー内でポインターを移動するだけである可能性もあります。

于 2014-10-08T00:52:48.093 に答える