我有一個包含記錄的二進制文件。該文件的結構是這樣的:fread/fwrite在C中的字符串
結構(見下文) 名稱串 地址字符串
有問題的結構:
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)
所以很明顯的IM做得不對。有人能給我一些幫助嗎?
它不會解決任何問題,但是您可以使用'strdup'而不是'strlen' +'malloc' +'strcpy'。 – zneak 2010-03-07 19:58:33
這是一項家庭作業嗎? – 2010-03-07 19:59:31
添加了作業標籤,忘記了這一點。 – Blackbinary 2010-03-07 20:13:51