如何使用fwrite将结构的字符串成员写入文件?

时间:2016-03-25 05:43:57

标签: c file structure fwrite

我在c中有一个代码,我使用包含 name 的结构来使用scanf()函数获取用户输入。每当我尝试使用 fwrite()在文件中写入名称时,它不会写入我输入的所有字符,但只会写入少数(只有四个字符)。我知道问题出在fworite()函数的 sizeof()但是我不知道应该在 sizeof()里面写什么,所以我可以存储我从用户那里得到的字符串。我知道如果使用 char name [20] 而不是 char * name ,它会起作用。

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

struct Emp
{
  char *name;
  char *addr;
}*e;

int main()
{
   FILE *fp;

   e=(struct Emp *)malloc(sizeof(struct Emp));
   e->name=(char *)malloc(sizeof(char )*20);

   fp=fopen("Employee.txt","r+");
   if(fp==NULL)
   {
      fp=fopen("Employee.txt","w+");
      if(fp==NULL)
      {
        printf("cannot open the file");
        exit(1);
      }
    }

      printf("Name of Employee: ");
      scanf("%s",e->name);       
      fwrite(e->name,sizeof(e->name),1,fp);


return 0;
}

如果我输入员工名称:chiranjibi fwrite()函数只会在文件中写入 chir 。有没有办法让这个代码工作,所以我可以从用户输入任意数量的字符?

2 个答案:

答案 0 :(得分:1)

sizeof(e-> name)返回指针的大小(通常为4或8)

使用strlen(e->name)获取字符串的长度。假设字符串以null结尾。

答案 1 :(得分:0)

您可以直接将 4 作为fwrite()来电的第二个参数。

fwrite(e->name,4,1,fp);

因此,它只将前四个字符写入文件。如果要根据用户输入进行更改,请声明变量并从用户获取要打印的字符数,然后将该变量作为第二个参数传递给此函数调用。