c语言中的fgets与fputs函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fgets函数详解
fgets函数详解
fgets函数从流中读一行或指定个字符,
原型是char *fgets(char *s, int n, FILE *stream);
从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s 的指针,否则返回NULL。
形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针
例:如果一个文件的当前位置的文本如下
Love ,I Have
But ........
如果用
fgets(str1,4,file1);
则执行后str1="Lov",读取了4-1=3个字符,
而如果用
fgets(str1,23,file1);
则执行str="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0')。
编辑本段序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char string[] = "This is a test";
char msg[20];
/* open a file for update */
stream = fopen("DUMMY.FIL", "w+");
/* write a string into the file */
fwrite(string, strlen(string), 1, stream);
/* seek to the start of the file */
fseek(stream, 0, SEEK_SET);
/* read a string from the file */
fgets(msg, strlen(string)+1, stream);
/* display the string */
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作为函数值返回。
编辑本段Linux C
fgets(由文件中读取一字符串,也可以从屏幕上输入一字符串,见范例。
)
相关函数
open,fread,fscanf,getc
表头文件
include<stdio.h>
定义函数
char * fgets(char * s,int size,FILE * stream);
s,数据存储位置;size,读取字符串的最大数量;stream,指向FILE结构的指针。
函数说明
fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。
返回值
fgets()若成功则返回s指针,返回NULL则表示有错误发生。
范例
#include<stdio.h>
int main(void)
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
return 0;
}
执行
this is a test /*输入*/
this is a test /*输出*/
编辑本段php
fgets
(PHP 3, PHP 4, PHP 5)
fgets -- 从文件指针中读取一行
说明
string fgets ( int handle [, int length] )
从handle 指向的文件中读取一行并返回长度最多为length - 1 字节的字符串。
碰到换行符(包括在返回值中)、EOF 或者已经读取了length - 1 字节后停止(看先碰到那一种情况)。
如果没有指定length,则默认为1K,或者说1024 字节。
出错时返回FALSE。
例子
<?php
$handle = fopen("/tmp/inputfile.txt", "r");
while (!feof($handle)) {
$buffer = fgets($fd, 4096);
echo $buffer;
}
fclose($handle);
?>
fgets()函数中,第一个参数指针需要我们事先分配好大小。
另外,fgets()函数不适合取二
进制的文件,这样,容易发生错误。
注:fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中。
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:
1.当遇到换行符或者缓冲区已满,fgets就会停止,返回读到的数据,值得注意的是不能用fgets读二进制文件,因为fgets会把二进制文件当成文本文件来处理,这势必会产生乱码。
2.每次调用,fgets都会把缓冲区的最后一个字符设为null,这意味着最后一个字符不能用来存放需要的数据,所以如果有一行,含有LINE_SIZE个字符(包括换行符),要想把这行读入缓冲区,请把参数n设为LINE_SIZE+1
3. 由结论1可推出:给定参数n,fgets只能读取n-1个字符(包括换行符),如果有一行超过n-1个字符,那么fgets返回一个不完整的行,也就是说,只读取该行的前n-1个字符,但是,缓冲区总是以null字符结尾,对fgets的下一次调用会继续读该行。
fputs向指定的文件写入一个字符串,puts向标准输出写入一个字符串。
#include <stdio.h>
int fputs(const char *s, FILE *stream);
int puts(const char *s);
返回值:成功返回一个非负整数,出错返回EOF
缓冲区s中保存的是以'\0'结尾的字符串,fputs将该字符串写入文件stream,但并不写入结尾的'\0'。
与fgets不同的是,fputs并不关心的字符串中的'\n'字符,字符串中可以有'\n'也可以没有'\n'。
puts将字符串s写到标准输出(不包括结尾的'\0'),然后自动写一个' \n'到标准输出。
怎么将文件中的多行字符串读入到一个二维数组中?
求助:如何将文件中的多行字符串读入到一个二维数组中????
在1.txt这个文件中有这样三行数据:
asdf a
dfe de d
de i am
------解决方案--------------------
fscanf(f1,"%s",a[i])遇到空格就停止了,读取一行要用fgets。
C/C++ code
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *f1,*f2;
char a[101][31]={0};
int i,j,x,num=0,sum=0;
f1=fopen("1.txt","rt");
f2=fopen("2.txt","wt");
for(i=1;i<101;i++)
{
//fscanf(f1,"%s",a[i]);
fgets(a[i], 30, f1);
if(feof(f1)==EOF)
break;
}
for(i=0;i<6;i++)
printf("%c",a[1][i]);
fclose(f1);
fclose(f2);
getch();
}
------解决方案--------------------
读取一行要用fgets,遇到\n结束
用fscanf逐个读单词,遇到制表符、空格或者换行符结束
C语言逐行读取文件内容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main()
{
char buf[MAX_LINE]; /*缓冲区*/
FILE *fp; /*文件指针*/
int len; /*行字符个数*/
if((fp = fopen("test.txt","r")) == NULL)
{
perror("fail to read");
exit (1) ;
}
while(fgets(buf,MAX_LINE,fp) != NULL) {
len = strlen(buf);
buf[len-1] = '\0'; /*去掉换行符*/
printf("%s %d \n",buf,len - 1);
}
return 0;
}。