fgets、gets和scanf的区别
来源:互联网 发布:做笔记的软件 编辑:程序博客网 时间:2024/05/31 05:28
gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
注意:gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用fgets()来替换gets()(在linux下,程序中用gets(),编译会有warning:the `gets' function is dangerous and should not beused)。
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的区别
- shell编程之sed编辑器&gawk程序
- typedef struct与struct的区别
- iOS内存管理编程指南
- Object c 基础知识
- 构造IOCTL命令的学习心得-----_IO,…
- fgets、gets和scanf的区别
- 12个有趣的c语言面试题
- 【转】英文面试决胜关键
- 【转】常见面试问题
- 【转】项目面试-如何介绍自己的项…
- 各大IT/IC公司offer比较
- Objective-C入门 简介Cocoa框架
- windows下利用VMware安装mac:构建…
- 【 Makefile 编程基础之…