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()函数。因为它有个能致命的缺陷,就是不能指定缓冲区,当输入的字符大于缓冲区写入的空间,会使缓冲区溢出,这将有可能会导致不可预料的错误,这种错误可能是非常严重的。


本文标签: 输入 字符串 空格 函数 读入