fpuc、fgtec、fgets和fpus函数

fputc(ch,fp),函数功能: 将字符ch写到文件指针fp所指向的文件的当前指针的位置。

fputs(str, fp)具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。

(1)把str中零结束符之前的全部文字输入到文件中。
(2)输入完成后,不会增加额外的特殊字符,如换行符等。

fgetc(ch,fp),文件指针fp指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。

fgets (buf, size, fp)文件结构体指针fp中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

(1)遇到换行或文件结束EOF则返回。
(2)按行读取。
(3)每一行结束处的换行字符‘/n’也算该行字符。
(4)对于大小为size的buf,最多只读取size-1个字符。

(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符('/0')

                                                             先来分析fpuc和fgetc:

  1 #include<stdio.h>
  2 #include<string.h>
  3 int main()
  4 {
  5     char buf[30]="ello world";
  6     FILE *fp;
  7     int ret;
  8 /*  --------------------------------//运行程序时,先注释24-45行,再注释8-23行,看程序运行结果是怎样的       
  9     fp=fopen("fputc.txt","w+");-------------//新建一个txt文件
 10     if(fp==NULL)
 11     {
 12         printf("open file error\n");
 13         return -1;
 14     }
 15     ret=fputc('h',fp); ------------------//写入一个‘h’字符,并打印出来
 16     printf("ret=%d[%c]\n",ret,ret);--------//输出h,104
 17     int i;
 18     for(i=0;i<strlen(buf);i++)-----------------------//依次打印buf里面的字符
 19     {
 20         ret= fputc(buf[i],fp);-------------------//依次输入buf字符串里面的字符
 21         printf("ret=%d[%c]\n",ret,ret);-----------//输出buf的字符及相应的Ascill码
 22     }
 23 */
 24     fp=fopen("fputc.txt","r+"); --------------//以只读的方式打开这个txt文件
 25     if(fp==NULL)
 26     {
 27         printf("open file error!\n");
 28         return -1;
 29     }
 30     ret=getc(fp);
 31     printf("ret=%d[%c]\n",ret,ret);-----------------//输出提取到的一个字符
 32     int i;
 33     char buf1[30];
 34     for(i=0;;i++)
 35     {
 36         ret=fgetc(fp);-----------------------//继续输出字符
 37         if(ret==EOF)----------------//
 38         {
 39             break;
 40         }
 41         buf1[i]=ret;---------------//从第二个字符开始,输出的字符存放在buf1中
 42     }
 43     printf("%s\n",buf1);
 44     fclose(fp);
 45 
 46 }

一:注释24-45行结果

ret=104[h]
ret=101[e]
ret=108[l]
ret=108[l]
ret=111[o]
ret=32[ ]
ret=119[w]
ret=111[o]
ret=114[r]
ret=108[l]
ret=100[d]

二、注释8-23行的结果

ret=104[h]
ello world
总结:fputc和fgetc每次只能给文件写入或者读出一个字符。


                                                                            fputs:

  1 #include <stdio.h>
  2 int main()
  3 {
  4     FILE *fp;
  5     char buf[128] = "hello world fputs!";
  6     int ret = -1;
  7 
  8     fp = fopen("fputs.txt","w+");
  9     if(fp == NULL)
 10     {
 11         printf("open file error!\n");
 12         return -1;
 13     }
 14 
 15     ret = fputs(buf,fp);---------------------//将buf里面的字符全部写入fp所指的文件之中,即fputs.txt
 16     printf("ret = %d\n",ret);
 17 
 18     fclose(fp);
 19 
 20 
 21 }
ret = 1

成功输入;

                                                                 fgets


  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     FILE *fp;
  6     char buf[128];
  7     char *p;
  8 
  9     fp = fopen("fputs.txt","r+");----------------------//打开上个程序所写入的文件
 10     if(fp == NULL)
 11     {
 12         printf("open file error!\n");
 13         return -1;
 14     }
 15 
 16     p = fgets(buf,sizeof(buf),fp);----------------------//读出文件内容
 17 
 18     printf("p = %p\n",p);
 19     printf("buf = %p\n",buf);
 20     printf("buf = %s\n",buf);--------------//打印内容
 21 
 22 
 23     fclose(fp);
 24     return 0;
 25 }

结果:

p = 0x7ffc408de9b0
buf = 0x7ffc408de9b0
buf = hello world fputs!

如果把buf里面的数字改为18,那么只能读取17个字符,结果将变为:

buf = hello world fputs

猜你喜欢

转载自blog.csdn.net/it8343/article/details/80244514
今日推荐