fgets、gets和scanf的区别
来源:互联网 发布:澳门网络博客网站 编辑:程序博客网 时间:2024/05/31 06:22
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作为函数值返回。- scanf gets 和 fgets的区别
- fgets、gets和scanf的区别
- fgets、gets和scanf的区别
- fgets、gets和scanf的区别
- 区别 scanf gets fgets
- 字符串输入函数,scanf,gets,fgets的用法和区别
- gets和fgets的区别.
- fgets和gets的区别
- fgets和gets的区别
- fgets()和gets()的区别
- fgets和gets的区别
- fgets和gets的区别
- gets和fgets的区别
- fgets和scanf的区别
- C语言中scanf、gets、fgets的区别
- gets 和 scanf的 区别
- gets和scanf的区别。
- gets和scanf的区别
- online_judge_1138
- 2015-12-13复习之CSS3 border 详解border-image
- Java 类加载 流程
- ruby--数值类(Numeric)
- ITMS-90096错误解决
- fgets、gets和scanf的区别
- 获取手机短信
- Objective-C中@property的基本概念
- SESSION 和COOKIE初级用法。。
- mysql中char与varchar的区别分析
- QT使用默认浏览器打开网页
- 菜鸟初学综合小整理
- CADisplayLink结合UIBezierPath的神奇妙用
- 编程语言的基本组成