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