c语言scanf字符串种类,gets与scanf_C语言中两种字符串输入方法比较

本文对比了C语言中gets()和scanf()函数在处理字符串输入时的行为差异,着重分析了gets()对空格的接收特性,并提供了使scanf()接受空格的方法。通过实例展示了这两种输入方式的不同输出,并讨论了字符串溢出问题及其解决方案。
摘要由CSDN通过智能技术生成

在C语言中存在两种字符串输入方法:

第一种:gets()函数

--程序1---

1 #include

2 #include

3 int main()

4 {

5     int i;

6     char str[20];

7     for (i=0; i<20; i++)

8     {

9         str[i] = 'a';

10     }

11     gets(str);

12     printf("字符串str长度:%d\n", strlen(str));

13     printf("打印字符串:%s\n", str);

14     for (i=0; i<20; i++)

15     {

16         printf("第%d个字符:%c\n", i+1, str[i]);

17     }

18     return 0;

19 }

第二种:scanf()函数

--程序2-----------

1 #include

2 #include

3 int main()

4 {

5     int i;

6     char str[20];

7     for (i=0; i<20; i++)

8     {

9         str[i] = 'a';

10     }

11     scanf("%s", str);

12     printf("字符串str长度:%d\n", strlen(str));

13     printf("打印字符串:%s\n", str);

14     for (i=0; i<20; i++)

15     {

16         printf("第%d个字符:%c\n", i+1, str[i]);

17     }

18     return 0;

19 }

如果输入:hello回车

--程序1输出------------

字符串str长度:5

打印字符串:hello

第1个字符:h

第2个字符:e

第3个字符:l

第4个字符:l

第5个字符:o

第6个字符:

第7个字符:a

第8个字符:a

第9个字符:a

第10个字符:a

第11个字符:a

第12个字符:a

第13个字符:a

第14个字符:a

第15个字符:a

第16个字符:a

第17个字符:a

第18个字符:a

第19个字符:a

第20个字符:a

--程序2输出---------

字符串str长度:5

打印字符串:hello

第1个字符:h

第2个字符:e

第3个字符:l

第4个字符:l

第5个字符:o

第6个字符:

第7个字符:a

第8个字符:a

第9个字符:a

第10个字符:a

第11个字符:a

第12个字符:a

第13个字符:a

第14个字符:a

第15个字符:a

第16个字符:a

第17个字符:a

第18个字符:a

第19个字符:a

第20个字符:a

如果输入:hello空格world回车

--程序1输出----------------

字符串str长度:11

打印字符串:hello world

第1个字符:h

第2个字符:e

第3个字符:l

第4个字符:l

第5个字符:o

第6个字符:

第7个字符:w

第8个字符:o

第9个字符:r

第10个字符:l

第11个字符:d

第12个字符:

第13个字符:a

第14个字符:a

第15个字符:a

第16个字符:a

第17个字符:a

第18个字符:a

第19个字符:a

第20个字符:a

--程序2输出--------------

字符串str长度:5

打印字符串:hello

第1个字符:h

第2个字符:e

第3个字符:l

第4个字符:l

第5个字符:o

第6个字符:

第7个字符:a

第8个字符:a

第9个字符:a

第10个字符:a

第11个字符:a

第12个字符:a

第13个字符:a

第14个字符:a

第15个字符:a

第16个字符:a

第17个字符:a

第18个字符:a

第19个字符:a

第20个字符:a

分析:对于scanf()会过滤空格,不接受空格后面的字符。但gets()会接受。2个函数在给变量赋值时都会将

字符串最后一位变为'\0'。例如上面输入  hello回车  后,第6个字符打印时不显示,其实是'\0'这个字

符,这个字符在屏幕上打印不出来。如果我们输入一串超过20个的字符串,程序运行时会显示错误。

那么如何能让scanf()能接受空格呢?可以在scanf()进行格式控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值