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