Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从文件读取时获取结构中的垃圾值_C_Linux_File_Parsing_Struct - Fatal编程技术网

C 从文件读取时获取结构中的垃圾值

C 从文件读取时获取结构中的垃圾值,c,linux,file,parsing,struct,C,Linux,File,Parsing,Struct,我有一个这样的文本文件 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);

我有一个这样的文本文件

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);
我有一个这样的结构

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);
我像这样将结构的值写入文件

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);
请告诉我哪里出了问题

比如说nemetroid:


您正在用 结构的fptrinf,但正在尝试读取二进制表示 和弗雷德

例如,假设您想在文件中写入一个int。这样做:

   fd = fopen("file","a+");
   fprintf(fd,"%d",42);
int a = 0;
fread(&a,sizeof(a),1,fd);
您将写字符“4”和字符“2”。在ASCII中,“4”是0x34,“2”是0x32。 如果要读取该文件并尝试通过以下操作将其放入4字节整数中:

   fd = fopen("file","a+");
   fprintf(fd,"%d",42);
int a = 0;
fread(&a,sizeof(a),1,fd);
变量“a”将包含文件上的数据:

a = 0x00003234

而不是您预期的42 0x0000002a。

代码中缺少一些调用:

刷新缓冲区 用于刷新文件的缓冲区,如果您对文件执行写入操作,并且现在要读取,则必须调用此函数 菲克 用于设置文件位置指示器。在您的例子中,文件位置指示器位于文件的末尾。使用fseek将文件位置设置为开始写入而不是开始读取的位置。
fscanf函数对应于fprintf。fread对应于fwrite。这意味着如果要使用fprintf转储结构,则使用fscanf读取它。如果要使用fread读取结构,请使用fwrite转储它。参考这些函数的手册页应该会有所帮助。

尝试格式化阅读。。。与fscanf.allow一样,第一个文件的用途是什么?@SouravGhosh first file是文本文件,我必须从中读取值。还尝试了fscanf,但没有得到确切的输出。我不确定,但可能是倒带FP;在fread之前是必需的。您正在使用结构的fptrinf编写文本表示,但尝试使用fread读取二进制表示。是的,我说a=0x3442而不是0x3432时出错,我忘记了尾数。使用GDB一步一步地使用调试器向我显示a=0x3234.Nice。