顺序读写函数的介绍:fputs & fgets

目录

函数介绍:

fputs:

写入多行字符到文件中:

文件效果:

 图中的效果是变成了一行,那么想要变成多行的效果应该如下代码所示进行操作:

多行字符代码:

文件效果: 

fgets:

将文件内容打印到屏幕上:

文件内容展示:

代码:

 问题:

屏幕效果:

数组空间本就有内容:

调用代码效果展示:


函数介绍:

顺序读写函数的介绍:fputs & fgets_第1张图片

  • fgets:一次读取一行字符
  • fputs:一次写入一行字符 

fputs:

fputs(“一行字符”,文件指针变量);

写入多行字符到文件中:

int main()
{
  FILE* pf = fopen("data.txt","w");
  if (pf == NULL)
  {  perror("fopen");
     return l;
   }
//写一行
  fputs("hello world",pf);
  fputs("hehe",pf);
  fclose(pf);
  pf = NULL;
  return 0;
}
文件效果:

顺序读写函数的介绍:fputs & fgets_第2张图片

 图中的效果是变成了一行,那么想要变成多行的效果应该如下代码所示进行操作:

多行字符代码:
  fputs("hello world\n",pf);
  fputs("hehe\n",pf);
  fclose(pf);
  pf = NULL;

文件效果: 

顺序读写函数的介绍:fputs & fgets_第3张图片

fgets:

  • fgets()(函数原型:char *fgets(char *restrict str, int size, FILE *restrict stream))
  • fgets(存放空间的起始地址,读取字符的个数,文件指针变量)
  • 本意是将读取的内容放入空间中。

将文件内容打印到屏幕上:

文件内容展示:

顺序读写函数的介绍:fputs & fgets_第4张图片

代码:
int main()
{
  FILE* pf = fopen("data.txt","r");
  if (pf == NULL)
  {  perror("fopen");
     return l;
   }

  char arr[20] = {0};
  fgets(arr,20,pf);
  printf("%s\n",arr);
  
  fclose(pf);
  pf = NULL;
  return 0;
}

大意:将文件的内容进行读取,读取后的内容放到一个空间中,随后使用printf进行打印出,完成文件内容打印到屏幕上。

如图中,读取文件中第一行的二十个字符,并将读取后的二十个字符放入arr所指向的空间中,(arr是数组名,代表arr数组空间的第一个元素地址)

 问题:

在放入空间之前我们会发现一个问题,就是函数是读取一行的内容,而我们的文件的效果中有两行,且第一行的内容不足填充数组空间,所以会不会使用第二行进行填充数组空间?

屏幕效果:

顺序读写函数的介绍:fputs & fgets_第5张图片

 看样子当文件中的第一行内容不够,需要读取的次数时,不会读取第二行。

那么当我们将数组中一开始就设数值再次运行呢?

数组空间本就有内容:

int main()
{
  FILE* pf = fopen("data.txt","r");
  if (pf == NULL)
  {  perror("fopen");
     return 1;
   }

  char arr[20] = "xxxxxxxxxxxxx";
  fgets(arr,20,pf);
  printf(l%s\n",arr);
  
  fclose(pf);
  pf = NULL;
  return 0;
}
调用代码效果展示:

顺序读写函数的介绍:fputs & fgets_第6张图片

  •  从上图我们得知当读取完一行的内容后,便会在后面自动加上\0
  • 所以读取20个字符实际上是读取文件内容的19给字符,后面自己加上\0
  • 且,如果有多行内容,读取的时候会读取\n,且读取失败会返回空指针

你可能感兴趣的:(数据存储,文件操作,C语言,c语言,数据存储,函数,文件操作)