我有一个像这样的文本文件
987jgkfl
12358ldjkdju
7579jngj
8uuujkl
09698fjfj
我有这样的结构
struct emprec
{
int empid;
int todo;
char name[20];
};
我将结构的值写入文件,如下所示
fd = fopen("/home/tarun/Desktop/test34.txt","a+");
fprintf(fd,"%d",temp2.empid);
fprintf(fd,"%s",temp2.name);
count++;
fclose(fd);
但是当我从文件中读取时,我得到了垃圾值
while(i<=count)
{
fread(&temp5,sizeof(temp5),1,fd);
//fscanf(fd,"%d,%s",&temp5.empid,temp5.name);
//int k = strlen(temp5.name);
//printf("Value of k is %d\n",k);
//temp5.name[7]= '\0';
//fread(&temp5.empid,sizeof(temp5.empid),1,fd);
//fread(temp5.name,20,1,fd);
printf("\n%d %s",temp5.empid,temp5.name);
i++;
}
fclose(fd);
请告诉我哪里出错了
答案 0 :(得分:2)
喜欢说nemetroid:
你正在写一个文字表示(用 你的struct的fptrinf)但是试图读取二进制表示 (带着畏惧)。
例如,假设您要在文件中写入int。通过这样做:
fd = fopen("file","a+");
fprintf(fd,"%d",42);
您将写入字符'4'和字符'2'。在ASCII中,'4'是0x34而'2'是0x32。 如果你想读取那个文件,并试着把它放在一个4字节的整数中,这样做:
int a = 0;
fread(&a,sizeof(a),1,fd);
变量'a'将包含文件中的数据:
a = 0x00003234
而不是你期望的42(0x0000002a)。
答案 1 :(得分:0)
您的代码中缺少一些调用:
fflush()
fseek
fseek()
将文件位置设置为开始编写的位置,然后开始阅读。答案 2 :(得分:0)
fscanf函数对应于fprintf。 fread对应fwrite。这意味着如果要使用fprintf转储结构,请使用fscanf读取它。如果你想使用fread读取结构,那么使用fwrite转储它。参考这些功能的手册应该有所帮助。