我有一个包含记录的二进制文件。该文件的结构如下:
结构(见下文) 名称字符串 地址字符串
所讨论的结构:
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变量,为名称分配足够的内存,然后将名称读入变量中。
如下所示:
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)
很明显我做错了什么。有人可以给我一些帮助吗?
strdup
来代替strlen
+malloc
+strcpy
。 - zneak