fgets、gets和scanf的区别

原创 2013年12月02日 09:13:52

gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。

 

注意:gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用fgets()来替换gets()(在linux下,程序中用gets(),编译会有warning: the `gets' function is dangerous and should not be used)。

 

scanf("%s",&s)与gets(s)函数相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

 

fgets函数既可以用来从文件中读入字符串,也可以从屏幕上输入一字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针(此参数写成stdin即从屏幕取词);str是存放在字符串的起始地址;n是一个int类型变量,表示读取字符串字符的最大数量,函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符这就是为什么第二个参数是n,而最多只能读入n-1个字符的原因,这个地方一定要注意,如下代码:

int len;

char str[128];

fgets(str,128,stdin);

len = strlen(str);

printf("len= %d\n", len);

如果是在标准输入里输入abcd回车

输出结果是:5而不是4。

所以在需要用到字符串长度的时候要特别注意下。

)。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

标准文件IO以及scanf fgets gets 以及printf sprintf fprintf的区别

fopen, - stream open functions FILE *fopen(const char *path, const char *mode); path...

区别 scanf gets fgets

scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。 gets可以接收空格;而scanf遇到空格...

Linux C 字符串输入函数 gets()、fgets()、scanf() 详解

一、gets() 函数详解 gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串。 调用格式为: gets(str); ...

scanf,gets,getchar,fgets中的一些细节

1.getchar   int getchar ( void );   Get character from stdin   Returns the next character fr...

C库提供了三个读取字符串的函数:gets( ) fgets( ) scanf( )。

C库提供了三个读取字符串的函数:gets( )  fgets( )  scanf( )。 gets()---get string 从系统的标准输入设备(通常是键盘)获得一个字符串。因为字符串没有预定...

【C语言天天练(十五)】字符串输入函数fgets、gets和scanf

引言:如果想把一个字符串读到程序中,必须首先预留存储字符串的空间,然后使用输入函数来获取这个字符串。 读取字符串输入的第一件事是建立一个空间以存放读入的字符串。 char *name; scanf...

fgets()与gets()的区别

gets和fgets一些区别总结一下   1、fgets()比gets()安全        为了安全,gets()少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定...

fgets()和gets()的区别

在编程中发现gets和fgets一些区别总结一下; 1、 fgets比gets安全,使用gets编译时会警告 为了安全,gets少用,因为其没有指定输入字符的大小,限制...

gets()、puts()和fgets()、fputs() 的区别。

gets()、puts()和fgets()、fputs() 的区别。

gets和fgets函数的区别

1. gets与fgets   gets函数原型:char*gets(char*buffer);//读取字符到数组:gets(str);str为数组名。   gets函数功能:从键盘上输入...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fgets、gets和scanf的区别
举报原因:
原因补充:

(最多只允许输入30个字)