免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4921 | 回复: 12

[C] c语言字符串变量不是由多个字符组成的吗? [复制链接]

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
发表于 2012-09-06 20:38 |显示全部楼层
  1. #include "stdio.h"
  2. #include "stdlib.h"

  3. void main(){
  4.       char str[1];
  5.       printf("Please input a string!");
  6.       scanf("%s",str);
  7.       printf("str=%s\n",str);

  8. }
复制代码
运行程序的时候,我输入 iloveyou
结果str=iloveyou
str[0]=i

书上说 字符串是由字符数组组成的,这里str应该是i,而不应该时iloveyou,请大虾说说这里的猫腻.
小弟初学.请见谅

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2012-09-06 20:40 |显示全部楼层
一排狗屋里,每个屋子住一条狗,
你能在第一个狗屋里找到所有的狗么?

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
发表于 2012-09-06 20:45 |显示全部楼层
问题是我就让狗住在第一个屋子里面,我放好多狗进去,应该第一个屋子只能放一条,为什么全放进去了

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2012-09-06 20:49 |显示全部楼层
回复 3# nxlinux


    因为Scanf是个函数,函数可以做很多事情,比如按照狗屋的次序一条一条依次放上狗+_+
显然scanf的作者这样做了,你写信给他,让他按你想好的放狗,自然也是可以的。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
发表于 2012-09-06 20:53 |显示全部楼层
还是没说明白

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2012-09-06 21:04 |显示全部楼层
回复 5# nxlinux


   你是scanf,我给你10条狗,和100个狗屋,要你说将10条狗按编号放入其中连续的10个狗屋,再告诉你第一条狗住的狗屋的序号(比如从21号狗屋开始),
现在你要如何放

论坛徽章:
0
发表于 2012-09-07 10:28 |显示全部楼层
scanf函数将str转换为指针。你可以sizeof(str)和strlen(str),可以看出scanf后str的大小和长度,你可以看出str此时就是数组。

论坛徽章:
320
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2012-09-07 10:39 |显示全部楼层
char str[1];
越界了

论坛徽章:
22
双鱼座
日期:2013-08-30 09:25:19辰龙
日期:2014-07-28 11:22:24白羊座
日期:2014-08-26 10:34:1815-16赛季CBA联赛之浙江
日期:2016-03-15 10:51:5415-16赛季CBA联赛之八一
日期:2016-05-31 09:38:3615-16赛季CBA联赛之辽宁
日期:2017-08-31 14:59:2115-16赛季CBA联赛之辽宁
日期:2017-12-06 14:12:3615-16赛季CBA联赛之天津
日期:2019-01-02 15:25:49狮子座
日期:2014-05-19 09:16:35技术图书徽章
日期:2014-03-27 13:37:39技术图书徽章
日期:2014-02-26 09:16:57技术图书徽章
日期:2013-08-30 09:28:52
发表于 2012-09-07 11:50 |显示全部楼层
nxlinux 发表于 2012-09-06 20:53
还是没说明白

你原本只想拉出第一个屋子里的狗,由于邻里关系比较好,它会把它邻居也带出来。

scanf()函数将所输入的内容依次序放入内存,最后加上'\0',现在你用printf()打印,而printf()的
打印结束条件是遇到'\0',所以它会吧整个字符串都打印出来。

总之,是越界了,将字符数组设置大些,确保输入的内容(外加'\0')能够装得下。

论坛徽章:
0
发表于 2012-09-07 11:51 |显示全部楼层
回复 9# dengxiayehu


   
你原本只想拉出第一个屋子里的狗,由于邻里关系比较好,它会把它邻居也带出来。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP