标签:
编译、调用如下:
可以看到第二次,由于输入的字符串长度,导致Abort
2、同样的一个fgets的例子:
编译、调用如下:
并没有像scanf那样出现Abort的情况,而是对字符串进行了截断
3、对比scanf和fgets:
a) scanf不限制用户的输入,导致会出现上面测试例子的Abort
fgets限制用户的输入,超过之后进行截断字符串的操作,避免了Abort,但是要设置一个缓冲区长度值
b) scanf可以使用诸如scanf("%d/%d", &x, &y),这样的形式,让用户只需要输入1/3便可以分别得到x、y的值:
但是fgets,无论如何,每次都只能读入一个变量,而且只能是字符串(毕竟说是str嘛!),像下面这样的形式,编译是通不过的:
c)字符串中的空格
scanf用%s接收字符串的时候,遇到空格就会停止。如果想输入多个单词,需要多次调用scanf()
fgets()直接接收字符串中的空格
4、总结
由于3提到的一些区别,所以在使用scanf()和fgets()的时候,要注意情况。
标签:
原文地址:http://www.cnblogs.com/lcx4/p/4714280.html