3

レコードを含むバイナリ ファイルがあります。ファイルの構造は次のとおりです。

構造 (下記参照) 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)

だから明らかに私は何か間違ったことをしています。誰か助けてくれませんか?

4

2 に答える 2