重要な編集:
申し訳ありませんが、私は構造に大きな間違いを犯しました。char *name; 構造の外側にあることを意味し、構造の後にファイルに書き込まれます。このようにして、構造を読み取り、名前のサイズを調べてから、文字列を読み取ります。また、ヌル ターミネータが必要ない理由についても説明します。しかし、私はどこかで、私の実際の質問が答えられていると感じています。誰かが自分の回答を編集して、最適なものを選択できるようにしたい場合は、それをいただければ幸いです。
繰り返しますが、私が尋ねていた質問は、「構造体を読み取る場合、それが保持するデータも読み取っていますか、それとも他の方法でアクセスする必要がありますか」です。
混乱させて申し訳ありません
割り当てのために、私は (fread と fwrite を使用して) ディスクに構造を読み書きするプログラムを任されました。
コンセプトがつかめなくて困っています。この構造があるとしましょう:
typedef struct {
short nameLength;
char* name;
}attendenceList;
attendenceList names;
ここで、次のデータを与えるとします。
names.name = "John Doe\0";
names.nameLength = strlen(names.name); /*potentially -1?*/
次に、ファイル ポインタ fp を指定して fwrite... を使用します。
fwrite(&names,sizeof(names),1,fp);
ここでファイルを閉じ、後で開いて構造を読み込みます。問題は次のとおりです。構造体を読み取るとき、格納されている変数も読み取っているのでしょうか。
次に、次のようなことができますか。
if(names.nameLength < 10)
{
...
}
それとも、構造だけでなく何かを fread する必要がありますか、または何らかの方法でそれらを割り当てる必要がありますか? fread を次のように仮定します。
fread(&names,sizeof(names),1,fp);
また、上記のように、現在の関数で構造を定義したと仮定します。
助けてくれてありがとう!