4
offset=ftell(ptr)-sizeof(student1);
fseek(ptr,offset,SEEK_SET);
fwrite(&student1,sizeof(student1),1,ptr);

このCコードは、ポインタを現在の位置ftell(ptr)から読み取ったばかりの構造ブロックの先頭に移動することを意味します。私は正しいですか?

私が正しい場合、ファイル内の構造ブロックの先頭に戻るSEEK_CUR代わりに使用できますか?SEEK_SET

使用方法を教えてくださいSEEK_CUR。構造ブロックの先頭に戻ります。

私はプログラミングの初心者です。だから私を助けてください。

編集:答えてくれてありがとう。私がやろうとしているのは、キーワード(学生のロール番号)を検索し、この学生の情報(名前、住所、..)を更新することです。更新されたデータは、以前のデータに正常に置き換えられます。もう1つ質問させてください。古いデータに置き換える代わりに、以前のデータの上に新しいデータを挿入する方法はありますか?

4

2 に答える 2

7

このCコードは、ポインターを現在の位置[ftell(ptr)]から、読み取ったばかりの構造ブロックの先頭に移動することを意味します。私は正しいですか?

そう思います。

SEEK_CURの使用方法を教えて、構造ブロックの先頭に戻ってください。

負のオフセットを使用できます。

#include <stdio.h>

fseek (ptr, -sizeof student1, SEEK_CUR);

とにかく、これらの呼び出しは避ける必要があります。非常に遅い可能性があります。かなりシーケンシャルな読み取りを使用します。

于 2012-11-11T10:55:33.487 に答える
3

試す:

fseek(ptr, -sizeof(student1), SEEK_CUR);
于 2012-11-11T10:54:33.533 に答える