gets函数有危险,那么语句gets(s);怎么用scanf函数改写呢?

如题所述

scanf(
)函数和gets(
)函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi
hello",则应该使用__gets__函数。
gets可以接收空格;而scanf遇到空格、回车和
Tab键
都会认为输入结束,所有它不能接收空格。
char
string[15];
gets(string);
/*遇到回车认为输入结束*/
scanf("%s",string);
/*遇到空格认为输入结束*/
所以在输入的字符串中包含空格时,应该使用gets输入。
scanf和gets获取字符串时的区别
在C语言中,能构获取字符串的函数至少有两个:
1.scanf()
所在
头文件
:stdio.h
语法:scanf("格式控制字符串",变量地址列表);
接受字符串时:scanf("%s",
字符数组名
或指针);
2.gets()
所在
头文件
:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时:
1.不同点:
scanf不能接受空格、
制表符
Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
2.相同点:
字符串接受结束后自动加'\0'。
例1:
#include
<stdio.h>
main()
{
char
ch1[10],
ch2
[10];
scanf("%s",ch1);
gets(ch2);
}
依次键入asd空格fg回车,asd空格fg回车,则ch1="asd\0",ch2="asd
fg\0"。
例2:
#include
<stdio.h>
main()
{
char
ch1[10],ch2[10],c1,c2;
scanf("%s",ch1);
c1=getchar();
gets(ch2);
c2=getchar();
}
依次键入asdfg回车,asdfg回车,则ch1="asdfg\0",c1='\n',ch2="asdfg\0",c2需输入。
scanf
:当遇到回车,空格和
tab键
会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。
gets:可接受
回车键
之前输入的所有字符,并用'\n'替代
'\0'.回车键不会留在输入缓冲区中
gets()用到读取字符串,用回车结束输入
scanf()可以读取所有类型的变量
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-17
gets函数和scanf函数都可以作为字符串的输入函数,
相同点:都是将从键盘输入的字符串存入数组中,输入完成后要以回车来结束输入。
不同点:利用sanf时,在输入过程中碰到空格时系统认为输入结束,并将空格之前的字符作有效字符。
所以要把空格用scanf输入。我没有学过
第2个回答  2019-02-28
不要用scanf
scanf一样有风险
自己写一个safe_gets(char
*s,
int
max_len,char
end_c)
通过getchar循环获取字符,当获取到end_c或者达到max_len时结束
很简单也很好用

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网