barriers / 阅读 / 详情

c语言fgets函数返回值问题,要是读到一串字符的末尾,那么函数返回值是NULL吗?还是说只有读取

2023-07-29 09:20:53
共2条回复
cloud123

关于 C 语言中的 fgets( ) 函数,该函数的作用就是从文本文件中读取一行文本内容。该函数执行成功将返回读入的字符串 buffer,读取失败或读到文件结尾返回NULL。

例如如下代码:

#define MAX 300

void main( )

{

unsigned char buffer[MAX] ;

FILE * fpr ;

fpr = fopen("my_text.txt","r);

if( fpr == NULL ) /*文本文件打开失败,则退出 */

{

printf("File open error ! ");

exit(1);

}

fgets(buffer,MAX, fpr); /* 从文本文件中读取一行数据 */

while( ! feof(fpr) ) /* 当文本文件未结束时 */

{

printf("buffer is: %s", buffer) ; /* 输出刚刚读取的文本文件的内容 */

fgets(buffer,MAX,fpr); /* 继续读取下一行数据 */

}

fclose(fpr); /* 关闭文件 */

}

okok云

可以辅助判断:if ( !feof(fp) ) { if ( fgets(buffer,256,fp)==NULL ) break; ... }

相关推荐

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