将结构写入文件给出垃圾值

时间:2014-12-10 07:17:20

标签: c file structure fwrite garbage

您好我正在尝试将结构写入文件。 以下是代码。

   #include<stdio.h>
   #include<string.h>
   #include<stdlib.h>

    /*structure*/ 
    struct student
    {
        char name[10];
        char space[1];
        char rollno[5];
    }head_rec;

    /*main*/
    void main()
    {
        FILE *fout;
        if(fout=fopen("output.txt","w")==NULL)
        {
            printf("Cannot open the file to write");
            exit;
        }
        memset(&head_rec,'\0',sizeof(struct student);
        sprint(head_rec.name,"SOUMYA",6);
        memset(head_rec.space,' ',1);
        memset(head_rec.rollno,'\0',sizeof(head_rec.rollno);
        sprint(head_rec.rollno,"0000",4);
        head_rec.rollno[4]='\0';
        fwrite(&head_rec,sizeof(struct student),1,fout);
    }

输出:

  

SOUMYA 0000 ^ @

如何摆脱最后一个角色?

1 个答案:

答案 0 :(得分:1)

由于您要将整个结构写入文件,因此需要避免填充。这可以这样做:

#pragma pack(push)
#pragma pack(1)
     struct student
        {
         char name[10];
         char space[1];
         char rollno[5];
        }head_rec;
#pragma pack(pop)

此外,您的主要功能必须返回integer值。因此,将void main()更改为int main()

另请注意:使用snprintf代替sprintf,因此您可以指定目标缓冲区的最大大小,这样可以更安全。

加:

if(fout=fopen("output.txt","w"))

应该是:

 if((fout=fopen("output.txt","w"))==NULL)