barriers / 阅读 / 详情

fscanf 与fgets有什么区别?

2023-07-29 09:19:36
共3条回复
max笔记

字符串读写函数fgets和fputs

一、读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志""。

例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。

[例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 exit!");

getch();

exit(1);

}

fgets(str,11,fp);

printf("%s",str);

fclose(fp);

}

本例定义了一个字符数组str共11个字节,在以读文本文件方式打开文件e101.c后,从中读出10个字符送入str数组,在数组最后一个单元内将加上"",然后在屏幕上显示输出str数组。输出的十个字符正是例10.1程序的前十个字符。

对fgets函数有两点说明:

1. 在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。

2. fgets函数也有返回值,其返回值是字符数组的首地址。

二、写字符串函数fputs

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

fputs(“abcd“,fp);

其意义是把字符串“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: ");

scanf("%s",st);

fputs(st,fp);

rewind(fp);

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf(" ");

fclose(fp);

}

本例要求在string文件末加写字符串,因此,在程序第6行以追加读写文本文件的方式打开文件string 。 然后输入字符串,并用fputs函数把该串写入文件string。在程序15行用rewind函数把文件内部位置指针移到文件首。再进入循环逐个显示当前文件中的全部内容。

数据块读写函数fread和fwrite

C语言还提供了用于整块数据的读写函数。 可用来读写一组数据,如一个数组元素,一个结构变量的值等。读数据块函数调用的一般形式为: fread(buffer,size,count,fp); 写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp); 其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。 size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。

例如:

fread(fa,4,5,fp); 其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。

[例10.6]从键盘输入两个学生数据,写入一个文件中, 再读出这两个学生的数据显示在屏幕上。

#include

struct stu

{

char name[10];

int num;

int age;

char addr[15];

}boya[2],boyb[2],*pp,*qq;

main()

{

FILE *fp;

char ch;

int i;

pp=boya;

qq=boyb;

if((fp=fopen("stu_list","wb+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf(" input data ");

for(i=0;i<2;i++,pp++)

scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);

pp=boya;

fwrite(pp,sizeof(struct stu),2,fp);

rewind(fp);

fread(qq,sizeof(struct stu),2,fp);

printf(" name number age addr ");

for(i=0;i<2;i++,qq++)

printf("%s %5d%7d%s ",qq->name,qq->num,qq->age,qq->addr);

fclose(fp);

}

本例程序定义了一个结构stu,说明了两个结构数组boya和 boyb以及两个结构指针变量pp和qq。pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件“stu_list”,输入二个学生数据之后,写入该文件中, 然后把文件内部位置指针移到文件首,读出两块学生数据后,在屏幕上显示。

格式化读写函数fscanf和fprintf

fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。 两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:

fscanf(fp,"%d%s",&i,s);

fprintf(fp,"%d%c",j,ch);

用fscanf和fprintf函数也可以完成例10.6的问题。修改后的程序如例10.7所示。

[例10.7]

#include

struct stu

{

char name[10];

int num;

int age;

char addr[15];

}boya[2],boyb[2],*pp,*qq;

main()

{

FILE *fp;

char ch;

int i;

pp=boya;

qq=boyb;

if((fp=fopen("stu_list","wb+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf(" input data ");

for(i=0;i<2;i++,pp++)

scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);

pp=boya;

for(i=0;i<2;i++,pp++)

fprintf(fp,"%s %d %d %s ",pp->name,pp->num,pp->age,pp->

addr);

rewind(fp);

for(i=0;i<2;i++,qq++)

fscanf(fp,"%s %d %d %s ",qq->name,&qq->num,&qq->age,qq->addr);

printf(" name number age addr ");

qq=boyb;

for(i=0;i<2;i++,qq++)

printf("%s %5d %7d %s ",qq->name,qq->num, qq->age,

qq->addr);

fclose(fp);

}

与例10.6相比,本程序中fscanf和fprintf函数每次只能读写一个结构数组元素,因此采用了循环语句来读写全部数组元素。还要注意指针变量pp,qq由于循环改变了它们的值,因此在程序的25和32行分别对它们重新赋予了数组的首地址。

文件的随机读写

前面介绍的对文件的读写方式都是顺序读写, 即读写文件只能从头开始,顺序读写各个数据。 但在实际问题中常要求只读写文件中某一指定的部分。为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个, 即 rewind 函数和fseek函数。

rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。 下面主要介绍

fseek函数。

fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。

其表示方法如表10.2。

起始点    表示符号    数字表示

──────────────────────────

文件首    SEEK—SET    0

当前位置   SEEK—CUR    1

文件末尾   SEEK—END     2

例如:

fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后,即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。

[例10.8]在学生文件stu list中读出第二个学生的数据。

#include

struct stu

{

char name[10];

int num;

int age;

char addr[15];

}boy,*qq;

main()

{

FILE *fp;

char ch;

int i=1;

qq=&boy;

if((fp=fopen("stu_list","rb"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

rewind(fp);

fseek(fp,i*sizeof(struct stu),0);

fread(qq,sizeof(struct stu),1,fp);

printf(" name number age addr ");

printf("%s %5d %7d %s ",qq->name,qq->num,qq->age,

qq->addr);

}

文件stu_list已由例10.6的程序建立,本程序用随机读出的方法读出第二个学生的数据。程序中定义boy为stu类型变量,qq为指向boy 的指针。以读二进制文件方式打开文件,程序第22行移动文件位置指针。其中的i值为1,表示从文件头开始,移动一个stu类型的长度,然后再读出的数据即为第二个学生的数据。

西柚不是西游

fscanf 向指定文件进行格式化的输入,可以是字符串,可以是字符,可以是整数,可以是浮点数。而fgets只能向文件中输入字符串,是字符串输入函数。

余辉
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
fscanf(FILE *stream, const char *format, ...)
从stream流中按照format格式读取数据,存放到...指定的变量中,这是一个可变参数函数。
详见:
http://en.c**********.com/w/cpp/io/c/fscanf
http://www.c*******.com/reference/cstdio/fscanf/?kw=fscanf
fgets(char *str, int count, FILE *stream)
从stream流中读取最多count-1个字符到str中,遇到文件末尾或者行尾部( )则停止,这时可能读取的字符少于count-1个。
详见:
http://en.c**********.com/w/cpp/io/c/fgets
http://www.c*******.com/reference/cstdio/fgets/?kw=fgets
区别:
fscanf是一种带有格式化的读取,读取的内容一般会赋值给指定类型的变量,与scanf类似,一般以空格、回车换行符作为读取的区分点。fgets读取的则是简单的一堆指定长的无格式话的字符串,且需要考虑回车换行符的存在。
ps:上面的两个网址对于查找相关的C/C++资料还是很有帮助的。

相关推荐

fgets函数用法

fgets函数功能为从指定的流中读取数据,每次读取一行。其原型为:char *fgets(char *str, int n, FILE *stream);从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。扩展资料:一、函数原型是:char *fgets(char *s, int n, FILE *stream);从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋""),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。二、与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题。三、功能:1、《UNIX 环境高级编程》中指出,每次调用fgets函数会造成标准输出设备自动刷清!案例详见《UNIX环境高级编程(第二版)》中程序清单1-5和课后习题5.7,习题5.7的答案中给出了相关的论述。2、初入门者,大多数是在WINDOWS下,使用VS进行练习的。此环境下,对注意1中的情况进行测试,并不能看到案例中所描述的情景,因为具体的实现不同。
2023-07-28 12:59:361

fgets函数用法

fgets函数用法有:数据类型、变量赋值、控制流、函数定义、模块导入。1、数据类型:fgets支持各种数据类型,包括数字、字符串、列表、元组、集合和字典等。2、变量赋值:fgets中的变量可以直接进行赋值,不需要事先声明变量类型。例如:x=5。3、控制流:常用的控制流结构包括if语句、for循环和while循环。可以使用缩进来表示代码块。4、函数定义:可以使用def关键字定义函数,因为函数可以接受参数,并返回一个值。5、模块导入:fgets中可以使用import语句导入模块,从而使用模块中的函数和变量等。
2023-07-28 13:00:281

简答题:fgetc,fgets,fscanf,fread有什么样的区别?

fgetc用于文本读入,一次可以读取一个字符;fgets用于文本读入,一次可以读入一个字符串,直到达到指定长度或遇到换行符;fscanf用于文本读入,可以进行格式化的读取;fread用于数据读入,一次可以读入多个字节。
2023-07-28 13:01:112

c语言中的fgets函数。

哦这里是特殊情况。initial这个数组长度只有2,读进来一个数据就满了(因为第二个位置要写0呢。所以后面的回车没被读进来,因为缓冲区满了。
2023-07-28 13:01:214

C语言里fgets函数怎么用?

fgets(由文件中读取一字符串)x0dx0a  表头文件 x0dx0a  includex0dx0a  定义函数 x0dx0a  char * fgets(char * s,int size,FILE * stream);x0dx0a  函数说明 x0dx0a  fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。x0dx0a  返回值 x0dx0a  gets()若成功则返回s指针,返回NULL则表示有错误发生。x0dx0a  范例 x0dx0a  #includex0dx0a  main()x0dx0a  {x0dx0a  char s[80];x0dx0a  fputs(fgets(s,80,stdin),stdout);x0dx0a  }x0dx0a  执行 x0dx0a  this is a test /*输入*/x0dx0a  this is a test /*输出*/
2023-07-28 13:01:301

C语言中fgets和fgetc的区别

fgets读文件 每次读一个字符fgetc读文件 每次读一行
2023-07-28 13:01:416

c语言执行fgets时,如何判断是否到了文件末尾?

如果文件末尾有一个空行,注意特别注意用fgets进行读,比如文件: aaa 234 444 bbb 123 kkk 9 00 00000 0000 ccc 34如果最后没有空行,即没有 ,读到ccc 34这行时,fgets遇到了EOF,结束,str="ccc 34"; 如果最后有空行;读到ccc 34这行时,fgets遇到了new line,str="ccc 34 ",此时文件未返回EOF,再次fgets时,遇到EOF,fgets返回NULL,str的内容没有变,因此用fgets读时判断是否该结束最好如此:while(fgets(...)) { ... }而不要用 while(!feof()) { fgets(); ... }
2023-07-28 13:01:591

c语言fgets里怎么换行

比较简单的方法你可以在需要换行的,用特殊字符来替代文本中的的换行符,比如说是QWE^TY(不一定是^,总之是你不会用到的字符就行了),之后读取之后,再把^替换为 就行了。
2023-07-28 13:02:082

C语言的问题,fread和fgets的区别是什么?

fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加"",并以str作为函数值返回。int fread(void *ptr, int size, int nitems, FILE *stream);参 数:用于接收数据的地址(指针)(ptr) 单个元素的大小(size) 元素个数(nitems)提供数据的文件指针(stream)一个是读字符串,一个是读取指定大小的数据,当然结果会不一样。因为如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,所以fgets之后fp不会越界。p是指针,如果p=strchr(xx[i]," ");xx[i]中没有" ",则p=NULL.而NULL就是0.就不进入循环,就是说读取字符中,没有遇到换行符。根据fgets()知道最后一个就是字符串结束符‘";如果xx[i]中有" ",则p!=NULL,p指向第一个出现换行符的地方。进入循环,另换行符变成字符串结束符‘";因为‘"的ASCII码值为0;所以写成了*p=0;不知道说清楚没,希望对你有帮助。
2023-07-28 13:02:255

c语言中fgets的返回值类型??

是char *型。
2023-07-28 13:02:564

C语言里为什么fgets很少用?

因为fgets函数只能输入字符串,而Scanf()能输入多种类型的数据,加上一般的C语言教材往往重视讲授原理,而对程序健壮性、异常处理等考虑不多,所以一般资料很少提及fgets函数。scanf在获取用户输入的字符串时,遇到空格、制表符即终止,并在结尾自动加上”″。gets在获取用户输入字符串时,遇到空格、制表符不会终止,在结尾也会自动加上“”。由于scanf和gets这两个函数不对输入的长度进行核查,即使用户输入超过了规定的buffer容量,函数也会接受输入,造成缓冲区溢出,程序崩溃。所以建议实际使用时最好用fgets函数来替代。附上fgets函数的有关说明:fgets函数原型:char*fgets(char*buf,intbufsize,FILE*stream);参数:1.*buf:字符型指针,指向用来存储所得数据的地址。2.bufsize:整型数据,指明存储数据的大小。即每次最多读取bufsize-1个字符(第bufsize个字符赋""),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。3.*stream:文件结构体指针,将要读取的文件流。如为stdin,则从键盘读取。返回值:成功,则返回第一个参数buf;在读字符时遇到End-of-File,则EOF被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,ERROR被设置,返回NULL,buf的值可能被改变。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
2023-07-28 13:03:081

关于C语言fgets()读取文件?

你的第二行应该没有回车加换行的,文件结尾有EOF,至于怎么读取三个字符的不用深究吧,有输入缓冲区。fgets()在到达行末时停止
2023-07-28 13:03:183

标准库函数fgets(s,n,file)的功能是( )。

【答案】:B本题考查fgets()函数的使用调用形式:fgets(s,n,fp)。fgets函数参数说明:“S”可以是一个字符数组名,也可以是指向字符串的指针;“n”为要读取的最多的字符个数;“fp”是指向该文件型指针。fgets函数的功能是:从fp所指向的文件中读取长度不超过n-1个字符的字符串,并将该字符串放到字符数组S中,读入字符串后会自动在字符串末尾加入"\0"结束符,表示字符串结束。
2023-07-28 13:03:351

linux中fgets函数怎么用

fgets函数是从输入流中读取一个字符串,它是遇到换行符,或者传输了限定的字符数量,或者遇到EOF文件尾就停止(它会把换行符也加到接收字符串里面)。fgets函数的原型是:char *fgets(char *s, int n, FILE *stream);函数参数说明:第一个参数是接收参数,用于接收输入文件流的字符串,第二个参数n是字符串传输长度限定参数,表示当接收了n-1个字符时停止写入,第三个参数是文件流(就是fopen函数返回的文件流),也可以是输入流stdin。使用这个函数需要include头文件<stdio.h>。fgets函数和scanf的%s参数的区别是:scanf接收输入字符串时,是遇到空白字符就停止,而且scanf无法限定接收字符串的长度。
2023-07-28 13:03:431

fgets(buf,sizeof(s),stdin) 是什么意思啊?

stdin表示标准输入,是一个FILE类型fgets(buf,sizeof(s),stdin) 意思就是说从标准输入读入最多s-1个字符,存储到buf中,并在后面添加一个"",如果读入的不满s-1个字符,则都存储到buf中,遇到换行符结束,对了提醒楼主,buf要足够大,要大于等于sizeof(s),不然容易造成内存泄露
2023-07-28 13:03:512

一个关于C语言中的fgets函数的问题

fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:char*fgets(char*string,intsize,FILE*stream);参数说明:string为一个字符数组,用来保存读取到的字符。size为要读取的字符的个数。如果该行字符数大于size-1,则读到size-1个字符时结束,并在最后补充"";如果该行字符数小于等于size-1,则读取所有字符,并在最后补充""。即,每次最多读取size-1个字符。stream为文件流指针。【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数FILE*stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。
2023-07-28 13:03:582

c语言中gets ,getschar 和fgets 的用法及三者之间的差别

gets():原型:char *gets(char *buffer) ;功能:从stdlin中获取获取字符串一直到换行符或者遇到EOF为止,但换行符不被录取,会将换行符替换成‘"来表示字符串的结束返回值:如果读取成功会返回buffer指针,如果遇到EOF或者发生错误会返回NULL,当遇到NULL需要调用ferror()和feof()来判断是遇到EOF还是发生了错误ps:该函数读取一直读到遇到换行符为止,所以很容易发生溢出的情况,如果发生溢出,会覆盖堆栈中的内容,改变不相关的变量,我们可以使用fget()替换gets(),为了向后兼容,不会将换行符放入缓冲区中。[cpp] view plaincopy#include "stdio.h" //这个头文件包含gets()函数 int main() { char str1[15]; gets(str1); printf("%s ", str1); getchar() ; return 0; } 此时就可以从键盘上读取一个字符串到str1中ps:scanf("%s", str1) ;这样也可以输入字符串,如果遇到空格符就会认为字符串结束了,空格后的字符作为下一个字符串,但gets()会遇到换行符为止*****************************getchar():功能:这个函数由宏#define getchar() getc(stdin) 从标准输入中读取字符,等待用户输入字符串一直到换行符为止,用户输入的字符将会存入键盘缓冲区中包括换行符,他会读取第一个字符,返回第一个字符的ASCII码,getchar()会从缓冲区中读取剩下的字符一直到读完为止,然后等待如果输入换行符ps:getch()和getchar()差不多,但getch()在用户输入后就立即返回了不等待用户输入换行符,会返回输入字符的ASCII码,如果错误就-1,这个经常用于调试中[cpp] view plaincopy#include <string> #include <iostream> int main() { int c ; int a ; a = getchar() ; while((c = getchar()) != " ") { printf("%c", c) ; } getchar() ; return 0 ; } fgets():函数原型:char *fgets(char *buf, int bufsize, FILE *stream);从文件结构指针stream中读取数据,每次读取bufsize-1个数据,第bufsize个赋值成"",如果不足bufsize个数据则返回,如果遇到eof或者错误则返回Null,如果成功就返回buf地址[cpp] view plaincopy#include <string.h> #include <stdio.h> #include <iostream> int main() { FILE *stream; char string[] = "Love, I Have Since you can do it."; char msg[20]; /* *FILE * fopen(const char * path,const char * mode); *以w+的方式:以读写的方式打开,如果有文件则清零,没有则要新建一个新的 */ stream = fopen("DUMMY.txt", "w+"); /* *size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); *buffer:代表要写入的数据 *size:写入每项的字节数 *count:写入的项数 *stream:要写入的字节流 */ fwrite(string, strlen(string), 1, stream); /* 定位到文件的开始 */ fseek(stream, 0, SEEK_SET); fgets(msg, 6, stream);//此时文件指针会第六个字符 printf("%s ", msg); fgets(msg, 20, stream); printf("%s", msg); fseek(stream, 0, SEEK_SET); fgets(msg, 23, stream); printf("%s", msg); fclose(stream); system("pause") ; return 0; }
2023-07-28 13:04:187

fget函数怎么用。菜鸟请教。。。

fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加"",并以str作为函数值返回。
2023-07-28 13:04:471

c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用

fgets()从文件读取一个字符串fputs()将一个字符串输出到文件fread()从文件以二进制方式读取数据fscanf()是scanf()的文件版本fseek()将文件指针定位到文件中需要的位置
2023-07-28 13:04:571

fgets的数据怎么保存到string数组

用name.reserve(50);预留空间再用(char *)name.c_str()参见下面的代码: string name; FILE *fp; fp=fopen("date.txt","rt"); fseek(fp,0,SEEK_SET); name.reserve( 50 ); fgets( (char *)name.c_str(), 10,fp ); cout<<name<<endl;
2023-07-28 13:05:142

C语言中fgets和fgetc的区别

1、fgets和fgetc都是文件函数中的输入函数。其中第fgets是输入一个字符串,而fgetc则是输入一个字符。2、例如:#include <string.h>#include <stdio.h>int main(void){ FILE *stream; char string[100],c; stream = fopen("fan.txt", "r+"); /* 打开一个文本*/ fgets(string,99, stream); /* 读取文本中第一行 */ printf("%s", string); /* 在控制台显示该行文字 */ c = fgetc(stream);//读取文本第二行第一个字符 putchar(c); //在控制台显示该字符 fclose(stream); //关闭文件 return 0;}
2023-07-28 13:05:231

关于C语言中字符串处理函数fgets的用法

fgets(char* s, int size, FILE* stream) :最多在stream中读取size-1个字符存入s指向的缓冲区。遇到EOF(文件结束符)或" "结束,(" "放入s中)并在末尾加个。
2023-07-28 13:05:333

如何使fgets遇到换行符不停止

是不是读取的字符数太少,还没到换行符的位置
2023-07-28 13:05:412

C语言库函fgets(str,n,fp)的功能是

fp是文件指针,n是前几个字符,str是数组名,整个表达式的意思是从fp指向的文件中读取前n个字符进数组str,与gets等输入不同的是,gets是从键盘读入数据进终端,而fgets是从外部储存器读入数据进终端
2023-07-28 13:06:072

C语言里为什么fgets很少用?

习惯问题
2023-07-28 13:06:296

fgets问题

fgets函数原型的第一个参数是char*,指char类型数组内存的首地址 ,不能是NULL,NULL指向的内存估计无法写或者根本就不存在。你把NULL传给它,当然要返回错误,告诉你,这个地址是不正确的。
2023-07-28 13:06:452

linux fgets :

fgets读取到换行符时是把换行符存在字符串的最后一个字符的,而gets是不存储换行符的,所以你传到getservbyname中的name中最后一个字符是换行符,不是一个合法的主机名
2023-07-28 13:06:542

fgets()函数怎样用C++实现?

用read函数啊.
2023-07-28 13:07:043

标准函数fgets(s,n,f)的功能是?

给你个例子:#include <stdio.h>void main(){FILE *stream;char buf[128];stream=fopen("time.text","r");//打开文件(保证有该文件存在)fgets(buf,128,stream);//读取字符printf("%s ",buf);fclose(stream);}如上例可见:fgets(s,n,f)中的s为获得数据地址,n为获得数据的总字符数,f为需要读出字符的文件指针。上面长度为N,以数组来说,0开头,所以读取到buf[n-1]处。
2023-07-28 13:07:142

如何使用fgets函数代替gets

fgets的原型是char* fgets(char* s, int n, FILE* fp);参数数量比较多,有3个。而fgets相比于gets有一个显著的差别就是fgets会将行末的换行符算到读入的字符串里面。所以相同且正常(输入无错误,缓冲区够大)的情况下,fgets读入的字符串会比gets在末尾""前面多一个换行符;行长度超出缓冲区大小时只读入前 n-1 个字符。因此,gets(s);相当于fgets(s, sizeof(s), stdin); if(s[strlen(s) - 1] == " ") s[strlen(s) - 1] = ""; // 去掉换行符其实,末尾这个换行符是另有妙用的。
2023-07-28 13:07:231

c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用

fgets()从文件读取一个字符串fputs()将一个字符串输出到文件fread()从文件以二进制方式读取数据fscanf()是scanf()的文件版本fseek()将文件指针定位到文件中需要的位置
2023-07-28 13:07:342

用fgets读取多行内容

while(fgets(a,256,ptr)!=NULL) { SetDlgItemText(hwnd,IDC_EDIT1,a); }你这句语句实现的结果是将每一行读出来,放到IDC_EDIT1控件中,直到文件结尾。因为每一次读出来的放入IDC_EDIT1都会覆盖原来的值,所以IDC_EDIT1最终的内容只是最后一行的值。你如果想列举所有内容,需要设置IDC_EDIT1的显示多行属性 然后在while循环中先读IDC_EDIT1原来的内容,再把新内容加上去。例如:char b[1024];while(fgets(a,256,ptr)!=NULL) { GetDlgItemText(hwnd,IDC_EDIT1, (unsigned char*)b, 1024); strcat(b, " "); //加上回车 strcat(b, a); //a加到b后面 SetDlgItemText(hwnd,IDC_EDIT1,b); // a改成b }
2023-07-28 13:07:411

c语言问题,是不是fgets和fputs函数无法读取和写入回车字符

写入~~~
2023-07-28 13:07:512

fgets如何判断读文件读到的是空行

空行 str[0]==" " 可以判断strlen(str)== 1区别
2023-07-28 13:08:013

C语言 fgets()函数

这个有错吧#includeintmain(){charp;p=(char*)malloc(8);p=fgets(p,5*sizeof(char),stdin);//fgets这里是怎么处理的?printf("%s",p);return0;}从标准输入获取5个字符存到p中,然后再输出
2023-07-28 13:08:253

C语言里fgets函数怎么用?

fgets(由文件中读取一字符串)  表头文件   include<stdio.h>  定义函数   char * fgets(char * s,int size,FILE * stream);  函数说明   fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。  返回值   gets()若成功则返回s指针,返回NULL则表示有错误发生。  范例   #include<stdio.h>  main()  {  char s[80];  fputs(fgets(s,80,stdin),stdout);  }  执行   this is a test /*输入*/  this is a test /*输出*/
2023-07-28 13:08:341

求教c语言中fgets的用法

fgets函数原型char *fgets(char *buf, int bufsize, FILE *stream);参数*buf: 字符型指针,指向用来存储所得数据的地址。bufsize: 整型数据,指明存储数据的大小。*stream: 文件结构体指针,将要读取的文件流。含义:从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋""),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。用法:#include<string.h>#include<stdio.h>int main ( void ){ FILE*stream; char string[]="This is a test"; char msg[20]; stream=fopen("tmp.dat","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;}
2023-07-28 13:08:456

c语言中fgets的返回值类型??

1、如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则stream保持原来的内容,返回NULL;2、如果发生读入错误,error指示器被设置,返回NULL,stream的值可能被改变。如果文件中的该行,不足n-1个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过n-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回stream,失败或读到文件结尾返回NULL。因此不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。扩展资料函数使用:1、同时可以用作键盘输入:fgets(key,n,stdin)且还必须:key[strlen(key)]=""或者key[n-1]=""2、还有种程序经常使用的方法:key[strlen(key-1)]=0x00;3、与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题。参考资料来源:百度百科-fgets
2023-07-28 13:09:141

C语言 fgets 参数太少菜鸟求解答

char *fgets(char *buf, int bufsize, FILE *stream);
2023-07-28 13:09:271

C语言fgets读取头文件出现问题

LZ麻烦发一下你的winsock2.h,我们一起研究一下。
2023-07-28 13:09:351

怎么才能使fgets返回错误的值(null)?

fgets函数原型char *fgets(char *buf, int bufsize, FILE *stream);参数*buf: 字符型指针,指向用来存储所得数据的地址。bufsize: 整型数据,指明存储数据的大小。*stream: 文件结构体指针,将要读取的文件流。含义:从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋""),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。用法:#include<string.h>#include<stdio.h>int main ( void ){FILE*stream;char string[]="This is a test";char msg[20];stream=fopen("tmp.dat","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;}
2023-07-28 13:09:571

请问C语言中的这些语句gets,fgets,puts,sprintf,strcpy,strcat,strcmp,strlen的语义和用法是什么?

gets  【1】函数:gets  【2】头文件:stdio.h  【3】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。  【4】注意:本函数可以无限读取,不会判断上限,所以程序员应该确保str的空间足够大,以便在执行读操作时不发生溢出。  【5】示例:  #include"stdio.h"   void main()   {   char str1[5];   gets(str1);   printf("%s ",str1);   } fgets  函数名: fgets  功 能: 从流中读取一字符串  用 法: char *fgets(char *string, int n, FILE *stream);  形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针  序 例:  #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个字符。读入结束后,系统将自动在最后加"",并以str作为函数值返回。puts  功 能: 送一字符串到流中  用 法: int puts(char *string);  程序例:  #include <stdio.h>  int main(void)  {  char string[] = "This is an example output string ";  puts(string);  return 0;  }  初学者要注意以下例子  #include <stdio.h>  #include <conio.h>  int main(void)  {  int i;  char string[20];  for(i=0;i<10;i++)  string="a";  puts(string);  getch();  return 0;  }  从此例中可看到puts输出字符串时要遇到""也就是字符结束符才停止。如上面的程序加上一句 string[10]="";  #include <stdio.h>  #include <conio.h>  int main(void)  {  int i;  char string[20];  for(i=0;i<10;i++)  string="a";  string[10]="";  puts(string);  getch();  return 0;  }  运行就正确了  此 外 puts 和 printf 的用法一样==~~~
2023-07-28 13:10:041

fgets读取很长的行到一个字符串时,如何分配字符串的长度?

#define string_length 100fgets(line,string_length,fp);
2023-07-28 13:10:111

函数调用语句:fgets(buf,n,fp)中,buf,n,fp的含义分别是什么?

2.有下列语句:fgets(buf,n,fp);表示从fp指向的文件中读取个字符放到buf字符数组中去,函数值为。3.在C语言中,feof(fp)用来判断文件是否结束,如果遇到文件结束,则函数值为______,否则函数值为。4.在C语言文件函数中,fseek(fp,-20L,2)的功能是。
2023-07-28 13:10:322

c语言读文件换行

代码呢
2023-07-28 13:10:422

c语言中gets ,getschar 和fgets 的用法及三者之间的差别

gets——从标准输入接收一串字符,遇到" "时结束,但不接收" ",把" "留存输入缓冲区;把接收的一串字符存储在形式参数指针指向的空间,并在最后自动添加一个""。getchar——从标准输入接收一个字符返回,多余的字符全部留在输入缓冲区。fgets——从文件或标准输入接收一串字符,遇到" "时结束,把" "也作为一个字符接收;把接收的一串字符存储在形式参数指针指向的空间,并在" "后再自动添加一个""。简单说,gets是接收一个不以" "结尾的字符串,getchar是接收任何一个字符(包括" "),fgets是接收一个以" "结尾的字符串。
2023-07-28 13:10:511

C语言文件习题:在C语言中,函数fgets(str,n,fp)的功能是_________。

选择D.从文件fp中读取长度不超过n-1的字符串,存入str指向的内存空间。fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加"",并以str作为函数值返回。 0
2023-07-28 13:11:182

fgets导致文件描述符错误

输入错误。fgets是C语言中从文件中获取字符串函数,文件描述符与fgets不同,但俩者相关,俩个在进行编辑时,不能出现任何顺序和输入错误。
2023-07-28 13:11:251

MATLAB 里面fgets和fgetl有什么区别

都是从文本文件里面读一行的内容,差别在于,前者返回的结果中包含换行符而后者忽略换行符。另外还有一点,fgets调用时可以附加一个参数,指定一次最多读多少个字符(在行很长的时候避免消耗资源太大)。事实上,如果你细心点看看,会发现其实fgetl是通过调用fgets实现的——换言之,fgets是内建(built-in)函数,而fgetl是可以看到源代码的m-文件。
2023-07-28 13:11:331

为什么fgets(str,n,p);中的n-1为读出字符串的字符个数呢?

fgets函数从指定文件中读入一个字符串,存入字符数组中,并在结尾端自动加一个""。
2023-07-28 13:11:413