レコードを含むバイナリ ファイルがあります。ファイルの構造は次のとおりです。
構造 (下記参照) Name String Address String
問題の構造:
typedef struct{
char * name;
char * address;
short addressLength, nameLength;
int phoneNumber;
}employeeRecord;
employeeRecord record;
私はそのような名前を取得します:
char name[50];
printf("\nName:");
fgets(name,50,stdin);
record.nameLength = strlen(name)-1;
record.name = malloc(sizeof(char)*record.nameLength);
strcpy(record.name,name);
構造、名前、アドレスの順に記述します (前述のとおり)。
fwrite(&record.name,sizeof(char),record.nameLength,fp);
ここで、fp はファイル ポインタです。
今、私はファイルを閉じます。ただし、ファイルから読み取ってこのデータを取得する場合は、構造体を読み取り、nameLength 変数を読み取り、名前が収まる十分なメモリを malloc し、名前を変数に読み込む必要があると思います。
そのようです:
char *nameString = malloc(sizeof(char)*record.nameLength);
fread(nameString,sizeof(char),record.nameLength,fp);
printf("\nName: %s",nameString);
ただし、これを試みると、有効なデータが得られません。例:
Input name is: Joseph (6 characters)
Output data:
Name length is 6 (correct),
Name is �A � (aka garbage)
だから明らかに私は何か間違ったことをしています。誰か助けてくれませんか?