fgets()
c语言fgets用法 -回复

c语言fgets用法-回复C语言中的fgets函数是一个非常常用的输入函数,用于从文件或标准输入中读取一行字符。
本文将详细介绍fgets函数的用法,并给出一些示例代码来帮助读者更好地理解。
一、fgets函数的定义fgets函数的定义如下:cchar *fgets(char *str, int n, FILE *stream);在这个定义中,参数str是一个指向字符数组的指针,用于存储读取的字符;参数n表示读取的最大字符数,这样可以避免内存溢出的问题;参数stream是一个指向FILE结构的指针,用于指定要从哪个文件或标准输入中读取。
fgets函数的返回值是一个指向str的指针,如果发生错误或读取到文件结尾则返回NULL。
二、fgets函数的使用步骤使用fgets函数从文件或标准输入中读取字符的步骤如下:1. 包含头文件在使用fgets函数之前,需要包含stdio.h头文件,该头文件中包含了fgets 函数的原型。
2. 打开文件(可选)如果要从文件中读取字符,可以使用fopen函数打开文件,并将返回的文件指针传递给fgets函数的stream参数。
如果要从标准输入中读取字符,则可以直接使用标准输入流stdin。
3. 分配存储空间在调用fgets函数之前,需要为str参数分配足够的存储空间,以确保能够容纳读取的字符。
可以使用数组或动态分配的内存来存储读取的字符。
4. 调用fgets函数调用fgets函数时,将str指针、最大字符数n和文件指针stream传递给它。
fgets函数将读取最多n-1个字符,并在末尾添加一个空字符'\0'作为字符串的结束标志。
如果读取的字符数小于n-1,则fgets函数会在读取完一行字符之后停止,并返回str指针。
5. 处理读取到的字符可以通过检查返回值来判断读取是否成功。
如果返回值为NULL,则表示发生了错误或者读取到了文件的末尾。
如果返回值不为NULL,则表示成功读取了一行字符。
c语言中fgets函数

c语言中fgets函数摘要:1.fgets 函数的作用和功能2.fgets 函数的语法和参数3.fgets 函数的使用示例4.fgets 函数的注意事项正文:fgets 函数是C 语言中的一个文本处理函数,主要用于从文件或字符串中读取一行文本,并将其保存到指定的缓冲区中。
它是C 语言标准库中的函数,因此可以在任何C 语言程序中使用。
fgets 函数的语法如下:```char *fgets(char *str, int num, FILE *stream);```其中,参数`str`是一个字符指针,用于指向要存储读取内容的缓冲区;参数`num`是一个整数,表示缓冲区的最大长度;参数`stream`是一个FILE 指针,表示要读取的文件或字符串。
fgets 函数的使用示例:```c#include <stdio.h>#include <stdlib.h>int main() {char str[100];FILE *fp;fp = fopen("test.txt", "r");if (fp == NULL) {printf("Error: cannot open file.");exit(1);}fgets(str, 100, fp);printf("%s", str);fclose(fp);return 0;}```在这个示例中,我们首先打开名为"test.txt"的文件,然后使用fgets 函数从文件中读取一行内容,并将其保存到字符数组`str`中。
最后,我们输出`str`中的内容,并关闭文件。
在使用fgets 函数时,需要注意以下几点:1.如果缓冲区长度不足以容纳读取的内容,fgets 函数会返回一个空字符串,并设置errno 为ERANGE。
2.如果文件指针`stream`为NULL,fgets 函数会返回一个空字符串,并设置errno 为EOF。
fgets介绍

用法举例:
读取一个文件并打印之
FILE * fp = fopen(argv[1],"r");
char buf[200];
while (fgets(buf,200,fp) != NULL) { /* 每行的字符不能超过199才能正常工作 */
printf("%s",buf);
}
注意打印不用使用 printf("%s/n",buf),因为它会把换行符也读进去
2.每次调用,fgets都会把缓冲区的最后一个字符设为null,这意味着最后一个字符不能用来存放需要的数据,所以如果有一行,含有LINE_SIZE个字符(包括换行符),要想把这行读入缓冲区,请把参数n设为LINE_SIZE+1
3. 由结论1可推出:给定参数n,fgets只能读取n-1个字符(包括换行符),如果有一行超过n-1个字符,那么fgets返回一个不完整的行,也就是说,只读取该行的前n-1个字符,但是,缓冲区总是以null字符结尾,对fgets的下一次调用会继续读该行。
fget函数的原型如下:char *fgets(char *buf, int区,使用时注意以下几点:
1.当遇到换行符或者缓冲区已满,fgets就会停止,返回读到的数据,值得注意的是不能用fgets读二进制文件,因为fgets会把二进制文件当成文本文件来处理,这势必会产生乱码。
fgets在c语言中怎么用

fgets在c语言中怎么用在C语言中,fgets函数用于从指定的流中读取一行并保存到提供的缓冲区中。
其原型在stdio.h头文件中定义。
以下是fgets的基本用法:c复制代码#include<stdio.h>int main() {char buffer[100]; // 定义一个足够大的缓冲区来存储读取的行// 从标准输入(通常是键盘)读取一行if (fgets(buffer, sizeof(buffer), stdin) != NULL) {printf("你输入的是: %s", buffer);} else {printf("读取失败或达到文件末尾。
\n");}return0;}在上述示例中,fgets函数从标准输入(stdin)读取一行,并将其保存到buffer数组中。
sizeof(buffer)指定了缓冲区的最大大小,以字节为单位。
fgets会读取最多sizeof(buffer) - 1个字符,并在末尾添加一个空字符(\0)以标记字符串的结束。
如果读取成功,fgets会返回指向buffer的指针。
如果发生错误或达到文件末尾,它会返回NULL。
你还可以使用fgets从文件中读取行。
例如:c复制代码#include<stdio.h>int main() {FILE *file = fopen("example.txt", "r"); // 打开文件以进行读取if (file == NULL) {perror("打开文件失败");return1;}char buffer[100];if (fgets(buffer, sizeof(buffer), file) != NULL) {printf("文件中的第一行是: %s", buffer);} else {printf("读取失败或达到文件末尾。
c语言中的fgets与fputs函数

fgets函数详解fgets函数详解fgets函数从流中读一行或指定个字符,原型是char *fgets(char *s, int n, FILE *stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s 的指针,否则返回NULL。
形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针例:如果一个文件的当前位置的文本如下Love ,I HaveBut ........如果用fgets(str1,4,file1);则执行后str1="Lov",读取了4-1=3个字符,而如果用fgets(str1,23,file1);则执行str="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0')。
编辑本段序例:#include <string.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函数用来从文件中读入字符串。
php fgets函数的用法

PHP fgets函数的用法一、概述在PHP中,fgets函数是用来从文件中读取一行数据的函数。
它可以按照行来读取文件内容,并返回读取到的一行字符串。
本文将介绍fgets函数的使用方法及注意事项。
二、语法fgets函数的语法如下:string|false fgets ( resource $handle [, int $length ] )参数说明: - handle:文件资源指针,必须是通过fopen函数打开的文件。
- length(可选):指定从文件中读取的最大字节数,默认为1024。
当读取到最大字节数后,将停止读取,并返回已读取的内容。
返回值说明:如果读取成功,则返回读取到的一行字符串(包括换行符),如果已到达文件末尾,则返回false。
三、示例下面是一个简单的示例,演示了fgets函数的基本用法:$file = fopen("example.txt", "r");if ($file) {while (($line = fgets($file)) !== false) {echo $line;}fclose($file);}上面的示例代码中,首先使用fopen函数打开一个名为example.txt的文件,并以只读模式打开。
然后,通过fgets函数在循环中逐行读取文件内容,并输出到屏幕上。
最后,使用fclose函数关闭文件资源。
四、注意事项在使用fgets函数时,需要注意以下几点:1.文件资源必须通过fopen函数打开,并且在读取完毕后,需要使用fclose函数关闭文件资源,以释放系统资源。
2.使用fgets函数时,需要判断返回值是否为false,因为false表示已到达文件末尾或者读取出错。
3.如果需要读取指定行数的内容,可以在循环中使用计数变量进行控制。
4.如果要读取大文件,可以通过指定length参数来控制每次读取的字节数,以提高性能。
五、应用场景fgets函数在处理文本文件时非常常用,特别是需要逐行读取文件内容的场景。
c++中fgets函数的用法

c++中fgets函数的用法fgets函数是C语言中一个常用的输入函数,它可以从标准输入流中读取一行字符串,并将其存储到指定的字符数组中。
在C++语言中,我们同样可以使用fgets函数来实现输入操作。
其函数原型如下:```c++char* fgets(char* str, int num, FILE* stream);```其中,str是一个字符数组,用于存储读取的字符串;num表示最多读取的字符数(包括终止符'0');stream表示输入流,通常是stdin表示标准输入流。
fgets函数读取一行字符串的条件是遇到换行符或文件结束符EOF(End Of File),并将其存储到字符数组中。
如果读取的字符串超过了指定的字符数,fgets函数会截断字符串并在结尾添加终止符'0'。
fgets函数的使用示例:```c++#include <iostream>#include <cstdio>using namespace std;int main(){char str[100];cout << '请输入一行字符串:';fgets(str, 100, stdin);cout << '您输入的字符串是:' << str << endl;return 0;}```在上面的例子中,我们使用fgets函数从标准输入流中读取一行字符串,并将其存储到字符数组str中。
最后输出读取的字符串并退出程序。
需要注意的是,fgets函数在读取字符串时会保留换行符,如果需要去除换行符可以使用下面的代码:```c++str[strlen(str) - 1] = '0';```其中,strlen函数用于计算字符串的长度。
C语言中fputs()fgets()的使用方法

其意义是把字符串“abcd”写入fp所指的文件之中。[例10.5]在例10.2中建立的文件string中追加一个字符串。
#include main() { FILE *fp; char ch,st[20]; if((fp=fopen("string","at+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:/n"); scanf("%s",st); fputs(st,fp); rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("/n");
2. fgets函数也有返回值,其返回值是字符数组的首地址。
二、写字符串函数fputs
fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针) 其中字符串可以是字符串常量,也可以是 字符数组名, 或指针 变量,例如:
fputs(“abcd“,fp);
[例10.4]从e10_1.c文件中读入一个含10个字符的字符串。
#include main() { FILE *fp; char str[11]; if((fp=fopen("e10_1.c","rt"))==NULL) { printf("Cannot open file strike any key exitgets(str,11,fp); printf("%s",str); fclose(fp); }
c语言fgets函数用法

c语言fgets函数用法
fgets()函数是c语言标准库中常用的字符串处理函数,用于从指定流中读取一行字符串,其原型为:
char *fgets(char *str, int num, FILE *stream);
str:字符串指针,存储从stream中读取的数据
num:要读取的最大字符数
stream:文件指针,一般可以是标准输入stdin、标准输出stdout、文件指针或者socket等。
fgets()函数每次读取一行数据,以换行符“\n”,回车符“\r”等为结束条件,当读取到指定的字符数num-1时,它会自动在字符串末尾加上'\0'.
它的返回值是读取到的字符串指针。
示例代码:
#include <stdio.h>
int main()
{
char str[100];
printf("Input string:\n");//输入提示
//从标准输入流中读取字符串,最多可以读取99个字符
fgets(str,100,stdin);
printf("Read %d bytes from standard input:\n%s\n",strlen(str)-1,str); //打印
return 0;
}。
fgets和gets的区别

fgets函数从流中读一行或指定个字符,原型是char *fgets(char *s, int n, FILE *stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针例:如果一个文件的当前位置的文本如下Love ,I HaveBut ........如果用fgets(str1,4,file1);则执行后str1="Lov",读取了4-1=3个字符,而如果用fgets(str1,23,file1);则执行str="Love ,I Have",读取了一行(不包括行尾的'n')。
序例:#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函数用来从文件中读入字符串。
c语言中fgets函数

c语言中fgets函数fgets函数是C语言中一种常用的输入函数,它可以从指定的文件流中读取一行字符串,包括行末的换行符,并将其存储到指定的字符数组中。
该函数的声明如下:```cchar *fgets(char *str, int n, FILE *stream);```其中,str是一个字符数组,用于存储读取到的字符串;n是一个整数,指定了最多读取的字符数(包括字符串末尾的空字符);stream是一个指向文件的指针,用于指定从哪个文件中读取。
fgets函数的使用方法如下:```c#include <stdio.h>int main() {FILE *file = fopen("example.txt", "r"); // 打开文件if (file == NULL) {printf("无法打开文件\n");return 1;}char buffer[256];while (fgets(buffer, sizeof(buffer), file) != NULL) { // 逐行读取文件内容printf("%s", buffer);}fclose(file); // 关闭文件return 0;}```上述代码通过打开名为"example.txt"的文件,然后使用fgets函数逐行读取该文件的内容,并将其输出到控制台。
fgets函数的返回值是一个指向存储读取到的字符串的指针。
如果成功读取到了字符串,则函数返回值为str的值;如果在读取字符串时遇到了文件末尾或者出错,则函数返回值为NULL。
因此,在使用fgets函数时,我们通常会结合一个循环来读取多行内容,直到达到文件末尾或者读取出错为止。
需要注意的是,由于fgets函数会在读取换行符后停止读取,因此如果要读取文件中的换行符,则需要将缓冲区的长度n设置得足够大,例如256。
fgets()函数读取键盘,去掉换行符或丢弃多余的字符

fgets()函数读取键盘,去掉换⾏符或丢弃多余的字符在上⼀遍随笔中,我们知道可以⽤fgets()函数来代替不安全的gets()函数。
fgets函数中的第⼆个参数限制了读取的个数。
上篇⽂章也提到,fgets是会读取回车换⾏符的。
有时候我们并不希望在字符串中存在换⾏符。
有的时候我们在⼀⾏中多输⼊了⼏个字符,⽽这⼏个字符并不是我们想要的。
这时可以写⼀个⼩程序解决这个问题下⾯看程序(来⾃于C Primer Plus 第六版):该程序的功能是:读取输⼊⾏,删除存在字符串中的换⾏符,如果没有换⾏符,则丢弃数组装不下的字符。
#include <stdio.h>#include <stdlib.h>#define NUM 5#define SIZE 10int main(int argc,char* argv[]){char src[NUM][SIZE];printf("请输⼊,空⾏表⽰结束\n");int i=0;while( ( fgets(src[i],SIZE,stdin) ) != NULL && src[i][0]!='\n' ){int j=0;while( (src[i][j] != '\n') && (src[i][j] != '\0' ) )j++;if(src[i][j] == '\n')src[i][j]='\0';else{while( getchar() !='\n' )continue;}printf("输⼊为:%s\n",src[i]);i++;if(i>=5){break;}}return0;}。
fgets函数

fgets函数在看《征服C指针》时的一些问题的汇总。
1.fgets函数在《征服C指针》中很少用到scanf()函数,而是使用fgets函数和sscanf函数的组合,于是仔细看了下fgets函数的用法。
char *fgets(char *s, int size, FILE *stream);fgets() reads in at most one less than size characters from stream and stores theminto the buffer pointed to by s. Reading stops after an EOF or a newline. If a new-line is read, it is stored into the buffer. A '\0' is stored after the last charac-ter in the buffer.函数原型:char *fgets(char *buf, int bufsize, FILE *stream);参数:*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。
光看上面的说明还是不太明白fgets函数的细节问题,通过一些测试例子给出说明。
1.</pre><pre name='code' class='cpp'>#define N 10 //定义缓冲区的最大长度是102.int main()3.{4.char buf[N]={0};5.int i=0;6.while(fgets(buf, N, stdin)) {//从标准输入中读取一行数据到缓冲区buf中7.8.//打印出读取的次数,输入的字符串,字符串的长度,并且手动添加了换行符9.fprintf(stdout, 'time i:%d\ninput string:%s\nlength:%d\n', i, buf, strlen(buf));10.11.//将字符串中的每一个字符输出,即输出字符的十进制表示,也输出字符形式12.for (int j=0;j<strlen(buf);j++)13.{14.printf('buf[%d]:%d %c\n',j,buf[j],buf[j]);15.}16.i++;17.}18.return 0;19.}运行程序,最开始时下面这个等待输入的界面:往里面输入12345并按回车键,会输出下面的内容:这里需要注意下面几点:1:最上面的12345是手动输入的,点击回车后出现了下面几行,光标跳转到了最下面。
c++中fgets函数的用法

c++中fgets函数的用法fgets是C++中用于读取字符串的函数,它可以从文件或标准输入中读取一行字符串,并将其存储到指定的字符数组中。
fgets函数的格式如下:char *fgets(char *str, int n, FILE *stream);其中,str是一个指向字符数组的指针,用于存储读取的字符串;n是要读取的最大字符数,包括字符串结尾的空字符;stream 是一个指向文件的指针,用于指定要读取的文件。
fgets函数会在读取到换行符、文件结束符或者达到最大字节数n时停止读取。
如果读取成功,则返回str指向的字符数组;如果读取失败,则返回NULL。
下面是一个使用fgets函数读取文件内容的示例代码:#include <stdio.h>#include <stdlib.h>int main(){FILE *fp;char str[100];fp = fopen('test.txt', 'r');if (fp == NULL) {printf('打开文件失败');exit(1);}while (fgets(str, 100, fp) != NULL) {printf('%s', str);}fclose(fp);return 0;}在上面的代码中,我们首先打开了一个名为test.txt的文件,并使用fgets函数从文件中逐行读取内容,最后关闭文件并输出读取到的内容。
需要注意的是,fgets函数读取到的字符串中可能包含换行符,如果不想输出换行符,可以使用printf函数的%s格式化符号,并在输出前将换行符替换为空字符。
c语言gets()函数与它的替代者fgets()函数

c语⾔gets()函数与它的替代者fgets()函数在c语⾔中读取字符串有多种⽅法,⽐如scanf() 配合%s使⽤,但是这种⽅法只能获取⼀个单词,即遇到空格等空字符就会返回。
如果要读取⼀⾏字符串,⽐如:I love BIT这种情况,scanf()就⽆能为⼒了。
这时我们最先想到的是⽤gets()读取.gets()函数从标准输⼊(键盘)读⼊⼀⾏数据,所谓读取⼀⾏,就是遇到换⾏符就返回。
gets()函数并不读取换⾏符'\n',它会吧换⾏符替换成空字符'\0',作为c语⾔字符串结束的标志。
gets()函数经常和puts()函数配对使⽤,puts()函数⽤于显⽰字符串,并⾃动在字符串后⾯添加⼀个换⾏标志'\n'gets()函数存在⼀个严重的缺陷,这个缺陷就是:它不会检查数组是否能够装的下输⼊⾏:⽐如:我们定义了⼀个数组char src[5],这时候我们调⽤gets(src),来从标准输⼊读取字符串,我们看到gets()函数的参数为数组名,我们都知道,数组名就相当于⼀个指针,也就是数组的⾸地址。
这时如果我们的输⼊⼤于5个字符,⽐如 I love BIT,gets()函数会从src所指地址开始,依次填⼊每个字符,但是src只分配了5个字节的空间,填满这五个空间后,gets()函数就会访问未被分配的内存空间,如果这⽚空间已经存有数据,这时程序就会发⽣错误,⽽中断。
正式由于gets()函数的这个缺陷,在C99标准中,已经不再建议使⽤gets()函数,⽽在C11中更是直接抛弃了这个函数。
gets()被抛弃,那我们⽤什么来代替它的功能呢?C11标准新增了gets_s()函数可以代替gets()函数,但是,该函数是stdio.h输⼊输出函数系类中的可选扩展,因此,即使编译器⽀持C11标准,也有可能不⽀持gets_s()函数。
其实我们可以⽤c语⾔中的fgets()函数来代替gets()我们先看⼀下函数原型声明:char *fgets(char *buf, int bufsize, FILE *stream);注意⼀下第⼆个参数bufsize,这个参数就限制了读取的字符的个数,这就可以解决gets()函数的缺陷。
fgets()用法笔记

fgets()⽤法笔记为了避免缓冲区溢出,从终端读取输⼊时应当⽤fgets()代替gets()函数。
但是这也将带来⼀个问题,因为fgets()的调⽤格式是:fgets (buf, MAX, fp)fgets (buf, MAX, stdin)buf是⼀个char数组的名称,MAX是字符串的最⼤长度,fp是FILE指针。
fgets()函数读取到它所遇到的第⼀个换⾏符的后⾯,或者读取⽐字符串的最⼤长度少⼀个的字符,或者读取到⽂件结尾。
然后fgets()函数向末尾添加⼀个空字符以构成⼀个字符串。
如果在达到字符最⼤数⽬之前读完⼀⾏,它将在字符串的空字符之前添加⼀个换⾏符以标识⼀⾏结束。
问题出在有时字符串的结尾处可能多出⼀个换⾏符,我们需要把它去掉。
#include <stdio.h>#include <string.h>#define LEN 5int main(){char str[LEN];fgets(str, LEN, stdin);//fprintf(stderr, "%s %d\n", str, strlen(str));for(int i = 0; i < LEN; i++)printf("%d\t", str[i]);printf("\n");if(str[strlen(str)-1] == '\n')str[strlen(str)-1] = '\0';for(int i = 0; i < LEN; i++)printf("%d\t", str[i]);printf("\n");return0;}输⼊:abc输出:97 98 99 10 097 98 99 0 0说明,当输⼊的字符少于指定数⽬时,会将最后⼀个换⾏符保存在s[len-1]的位置,s[len]处恒为'\0'。
C语言fputs()和fgets()函数

C语言fputs()和fgets()函数在C语言编程中,fputs()和fgets()函数用于从流中写入和读取字符串。
下面来看看看如何使用fgets()和fgets()函数写和读文件。
写文件:fputs()函数fputs()函数将一行字符串写入文件,它将字符串输出到流。
其行为方式如下:(1)遇到换行或文件结束EOF则返回。
(2)按行读取。
(3)每一行结束处的换行字符'/n’也算该行字符。
(4)对于大小为size的buf,最多只读取size-1个字符。
(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符(’/0’)。
fputs()函数的语法:int fputs(const char *s, FILE *stream)示例:创建一个源文件:fputs-write-file.c,其源代码如下 -#include<stdio.h>//20200427void main() {FILE *fp;fp = fopen("my-write-file.txt", "w");fputs("hello c programming \n", fp);fputs("performance c programming \n", fp);printf("all content had write to file: my-write-file.txt\n");fclose(fp);}执行上面示例代码,得到以下结果 :all content had write to file: my-write-file.txt执行上面代码后,打开文件:my-write-file.txt,应该会看到以下内容hello c programmingperformance c programming读取文件:fgets()函数fgets()函数从文件中读取一行字符串,它从流中获取字符串。
fgets函数

fgets函数*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流返回值1.成功,则返回第一个参数buf;2.在读字符时遇到end-of->,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;3.如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
函数原型是char *fgets(char *s, int n, FILE *fp);当fgets的操作是逐个字符读取,遇到换行符,停止读取动作,就把当前字符串(包括换行符)赋值给s;当fgets的操作是逐个字符读取,遇到结束符,停止读取动作,也会把当前字符串(不包括结束符)赋值给s,如果当前字符串是空值就不会赋值给s,但是s原来有值的话,s会保持原值。
如果用fgets读取文件的内容,文件结尾是一个换行符,用以下程序,最后一行会输出两次。
while( !feof(fp) ){fgets( s , sizeof(s) , fp );printf("%s" , s);}因为当读到最后一行时,只读到换行符,因为没有读到结束符,所以 !feof(fp) 还是真,继续下一轮循环,最后一次fgets时,读取不到内容,所以 s 的内容没有更新(并不是在最后一行读了两次的原因才导致输出两次,而是因为没读到新值)。
解决方法,在 fgets( s , sizeof(s) , fp ) 之前清空s ,即加上一句memset(s , 0 , sizeof(s) ) ,最后一行就不回输出两次。
while( !feof(fp) ){memset(s , 0 , sizeof(s) );fgets( s , sizeof(s) , fp );printf("%s" , s);}如果文件最后一行没有换行符,那么最后读取得到的s值是一个没有换行符的字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.3.3fgets()
函数fgets()只用于读取文本文件,其功能是从指定的文本文件中读取一个指定长度
的字符串,语法格式为:
char*fgets(char*s,int n,FILE*fp);
其中,s为读取结果保存的字符串,可以是字符数组或字符指针;n是正整数,表示从文件中读出不超过n-1个字符,在读入的最后一个字符后加上字符串结束标志'\0';fp则表示文本文件对应的文件指针。
函数的返回结果为结果字符串s的首地址。
函数fgets()在读出n-1个字符之前,如果遇到了换行符,则函数结束,返回包括换行符在内的字符串;如果遇到了EOF,则函数结束,返回EOF之前的字符串。
如果文件一行中字符数大于n-1个,连续使用该函数读取会返回多个n-1个字符的字符串。
【例10-3】使用fgets()读取文本文件的内容。
每次读取10个字符,同样实现了读取指
定的文本文件内容并显示在屏幕的功能。
例10-3:10-3.c
/*
Name:10-3.c
Copyright:2006-2010,School of Software Engineering,BJTU
Author:Chen XuDong
Date:08-10-1017:21
Description:
从文件d:\string中依次读入一个含10个字符的字符串,并显示其内容。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
FILE*fp;
char str[11];
//注意双斜线
char*fname="d:\\string";//或者使用"d:/string"
if((fp=fopen(fname,"r"))==NULL){
printf("\n文件%s打开失败!",fname);
exit(1);
}
//显示文件内容
while(!feof(fp)){
fgets(str,11,fp);
printf("%s",str);
}
fclose(fp);
}
10.3.4fputs()
函数fputs()只用于写入文本文件,其功能是向指定的文本文件中写入一个字符串,语法格式为:
int fputs(const char*str,FILE*fp);
其中,str为要写入的字符串内容,可以是字符串常量、字符数组名或字符指针;fp则表示文本文件对应的文件指针。
【例10-4】读取键盘输入的字符串,将输入的字符串添加到文本文件末尾。
例10-4:10-4.c
/*
Name:10-4.c
Copyright:2006-2010,School of Software Engineering,BJTU
Author:Chen XuDong
Date:08-10-1017:37
Description:
在文件d:\string中追加一个字符串
*/
#include<stdio.h>
#include<stdlib.h>
void main(){
FILE*fp;
char ch,st[20];
char*fname="d:/string";
//以追加方式打开文件
if((fp=fopen(fname,"a+"))==NULL){
printf("\n文件%s打开失败!",fname);
exit(1);
}
//提示
printf("输入一个字符串:\n");
//获取键盘输入
gets(st);
//将输入的字符串添加到文件末尾
fputs(st,fp);
//关闭文件
fclose(fp);
}。