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()继续读取的时候是从下一行开始读。
函数原型:int fgetc(FILE *fp);
函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编成时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。
返回值:返回所得到的字符;若读入错误,返回EOF。
函数功能 :向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。
函数格式 :int fputs(const char *str,FILE *stream)
参数: str 是字符型指针,可以是字符串常量,或者存放字符串的数组首地址。
stream 通过打开文件函数fopen()获得的。
fputc函数
函数功能 :将字符ch写到文件指针fp所指向的文件的当前写指针的位置。
函数格式 :int fputc (int c, FILE *fp)。
参数 :fp 为文件指针,它的值是执行fopen()打开文件时获得的。
c 为输出的字符量。
虽然函数被定义为整形数,但仅用其低八位。
函数原型: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);
}