fgets、fgetc、fputs与fputc函数

fgets函数
函数原型char *fgets(char *buf, int bufsize, FILE *stream);
参数*buf: 字符型指针,指向用来存储所得数据的地址。
           bufsize: 整型数据,指明存储数据的大小。
          *stream: 文件结构体指针,将要读取的文件流。
返回值:成功,则返回第一个参数buf;在读字符时遇到eof,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
       从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
例:
如果一个文件的当前位置的文本如下
Love, I Have
Since you can do it.
如果用fgets(str1,6,file1);去读取
则执行后str1 = "Love," ,读取了6-1=5个字符
这个时候再执行fgets(str1,20,file1)则执行后str1 = " I Have\n"
而如果
fgets(str1,23,file1);
则执行str1="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0'),当前文件位置移至下一行,虽然23大于当前行上字符总和,可是不会继续到下一行。而下一次调用fgets()继续读取的时候是从下一行开始读。

例子:

#include<string.h>
#include<stdio.h>
int main ( void )
{
         FILE*stream;
         char string[]="Thisisatest";
         char msg[20];
         stream=fopen("DUMMY.FIL","w+");
         fwrite(string,strlen(string),1,stream);
         fseek(stream,0,SEEK_SET);
         fgets(msg,strlen(string)+1,stream);
         printf("%s",msg);
         fclose(stream);
         return 0;
}
       fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。


fgetc函数

该函数包含在C语言中的stdio.h头文件中,主要功能是从流中读取一个字符,并增加文件指针的位置。
函数原型int fgetc(FILE *fp);
函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编成时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。
返回值:返回所得到的字符;若读入错误,返回EOF。

例如:

#include <string.h> 
#include <stdio.h>  
int main(void) 
{
        FILE *stream;
        char string[ ] = "This is a test";
        int ch;  
        stream = fopen("DUMMY.FIL", "w+"); 
        fwrite(string, strlen(string), 1, stream); 
        fseek(stream, 0, SEEK_SET);
        do
        {
            ch = fgetc(stream);
            putch(ch);
        } 
        while (ch != EOF);
        fclose(stream);
        return 0;
}
fputs函数
函数功能 :向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。
函数格式 int fputs(const char *str,FILE *stream)
参数  str 是字符型指针,可以是字符串常量,或者存放字符串的数组首地址。
           stream 通过打开文件函数fopen()获得的。

fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针) 其中字符串可以是字符串常量,也可以是字符数组名, 或指针变量。

#include<stdio.h>
#include<string.h>
int main()
{
    char str[80]="asdhfdf\n";
    FILE *fp = NULL;
    if((fp=fopen("strfile.txt","w"))==NULL)
    {
       printf("cannot open file\n");
       exit(0);
    }
    fputs(str,fp); //putchar(str);
    fclose(fp);
    fp = NULL;
    return 0;
}

fputc函数
函数功能 :将字符ch写到文件指针fp所指向的文件的当前写指针的位置。
函数格式 int fputc (int c, FILE *fp)。
参数 fp 为文件指针,它的值是执行fopen()打开文件时获得的。
          c 为输出的字符量。
虽然函数被定义为整形数,但仅用其低八位。

返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。

#include<stdio.h> 
#include<string.h>
void main()
{
    FILE* fpout;
    char ch;
    if((fpout=fopen("file_a.dat","w"))==NULL)
    {
        printf("Error!\n");
        exit;
    }
    ch=getchar();
    for(;ch!='#';)
    {
        fputc(ch,fpout);
        ch=getchar();   //不能仅写getchar();
    }
    fclose(fpout);
}



  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值