admin 管理员组文章数量: 887018
2024年1月6日发(作者:wordpress建站实例)
在C语言中,能构获取字符串的函数至少有两个:
()
所在头文件:stdio.h
语法:scanf("格式控制字符串",变量地址列表);
接受字符串时:scanf("%s",字符数组名或指针);
()
所在头文件:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时:
1.不同点:
scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
2.相同点:
字符串接受结束后自动加'0'。
例1:
#include
main()
{
char ch1[10],ch2[10];
scanf("%s",ch1);
gets(ch2);
}
依次键入asd空格fg回车,asd空格fg回车,则ch1="asd0",ch2="asd fg0"。
例2:
#include
main()
{
char ch1[10],ch2[10],c1,c2;
scanf("%s",ch1);
c1=getchar();
gets(ch2);
c2=getchar();
}
依次键入asdfg回车,asdfg回车,则ch1="asdfg0",c1='n',ch2="asdfg0",c2需输入。
/ncre2/cpp/fudao/20090508/
--------------------------------------------------------------------
gets()与scanf()的区别
Linux C/C++ 2009-01-06 21:36:08 阅读11 评论0 字号:大中小
是否是格式化输入这么明显的就不说了……
1. gets函数在输入字符串时,可以输入空格,空格做为字符串的一部分输入;
scanf函数不能输入空格,即遇到字空格时,认为字符串输入结束。
2. scanf在从stdin流读取输入时,遇到回车键即'n',则停止,'n'仍留在输入流中,且忽略空格,使用时,如果有多个输入函数被调用,需注意对多余回车的读取,一般使用getchar();
gets接收输入时,不对接收变量进行检查,容易产生内存溢出;
------------------------------------------------------------------------------
在写一个小程序,发现scanf()不能输入空格。首先从网上找到了一下,发现用gets()函数能够实现空格输入。
对gets()函数的介绍如下:
gets()函数的原型:char * gets(char *str)
函数功能:从标准输入流读取字符串并回显,读到回车符时退出
这个函数从系统的标准输入设备中读入字符串。在此, 假设标准输入设备为键盘。由于一个串没有预先定义它的长度, gets()需要用一种方法来知道什么时候应该停止读入, 它的方法是一个个读入字符直到读入一个换行 n 符停止。这个换行符是通过敲键盘上的 [enter] 键产生的。函数读入换行符前的所有字符但不包括换行符, 并且将读入的串送入调用它的程序。
gets() 有两种可能的返回值。如果一切顺利的话, 它返回读入的串, 正如我们说过的。如果其中出现什么错误或 gets() 遇到一个 EOF 字符, 它返回一个 NULL。这样 gets() 中带有一些错误检查。
但是同时有人说不推荐使用gets()函数。因为它有个能致命的缺陷,就是不能指定缓冲区,当输入的字符大于缓冲区写入的空间,会使缓冲区溢出,这将有可能会导致不可预料的错误,这种错误可能是非常严重的。
版权声明:本文标题:scanf与gets 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1704481020h461655.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论