我試圖用char *字符串將結構保存到文件中。將一個char *字符串的C結構保存到一個文件中
struct d_object {
int flags;
int time;
int offset;
char *filename;
};
問題是,當我這樣做時,我顯然只會保存該指針的地址而不是字符串。所以我所做的只是使用一個字符數組,但我不得不設置字符串的最大大小。這工作正常,但我想知道是否有存儲結構與char *(我malloc在某些時刻)在一個文件中,然後檢索它。我可以保存字符串和結構分開,然後檢索它們,但它是相當混亂。如果我可以加載並保存整個結構(上面的結構)到文件中,那將會更好。謝謝!
與字符數組的代碼如下:
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
struct d_object {
int flags;
int time;
int offset;
char filename[255];
};
int main(int argc, char **argv) {
struct d_object fcb;
fcb.flags=5;
fcb.time=100000;
fcb.offset=220;
strncpy(fcb.filename,"myfile",255);
int fd=open("testfile",O_RDWR);
write(fd,&fcb,sizeof(fcb));
close(fd);
int fd2 = open("testfile",O_RDONLY);
struct d_object new_fcb;
read(fd2,&new_fcb,sizeof(new_fcb));
printf("read from file testfile: %s\n",new_fcb.filename);
return 0;
}
P.S:我不使用流功能,只是因爲這實際上意味着要在不具備他們的嵌入式操作系統上運行。我剛剛修改了* BSD/Linux的代碼,所以在提問時更有意義。
您使用fread的方式非常錯誤。你不需要聲明char緩衝區並讀入它,然後在它指向一個結構指針。只需聲明一個結構體並將指針傳遞給該結構體即可。你做這件事的方式並不是有效的C,並且可能會在RISC架構上出現嚴格的對齊要求。 – 2010-07-18 09:35:22
好的,謝謝你。但目前這不是主要問題。 – theprole 2010-07-18 09:36:43