| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 572 人关注过本帖
标题:关于 scanf 回车的问题 特别奇怪
只看楼主 加入收藏
lahalaha90
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-11-30
结帖率:0
收藏
已结贴  问题点数:1 回复次数:6 
关于 scanf 回车的问题 特别奇怪
下面我的程序 但是结果是这样的
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>

int main()
{
    char x[11],y[11];
    printf("Enter string 1: ");
    scanf("%s",x);
    printf("Enter string 2: ");
    scanf("%s",y);
   
    printf("x=%s\n",x);
    printf("y=%s\n",y);
    return 0;

}
搜索更多相关主题的帖子: include return Enter 
2014-11-30 15:32
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:1 
我执行了下没问题呀

一片落叶掉进了回忆的流年。
2014-11-30 18:37
I3NCottonHT
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2014-11-27
收藏
得分:1 
scanf的地址运算符&呢?

Enter the code world.
2014-11-30 19:38
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:1 
不知道楼主用的什么编译器. 我测试了下,除了不检查数组溢出外没有你提到的问题出现.

另外,回3楼,   scanf()输入字符串的时候不需要&运算符.

代码测试环境:  WinXP+C-Free5.0.
2014-11-30 20:00
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:1 
以下是引用lahalaha90在2014-11-30 15:32:49的发言:

下面我的程序 但是结果是这样的
#include <stdio.h>

int main()
{
    char x[11],y[11];
    printf("Enter string 1: ");
    scanf("%s",x);
    printf("Enter string 2: ");
    scanf("%s",y);
   
    printf("x=%s\n",x);
    printf("y=%s\n",y);
    return 0;

}

这应该和编译器有关,你这样的情况和VC6.0是一样的。如果你会调试的话,你会发现程序给x,y分配内存时,分配顺序是从低到高依次给y和x分配。假设给y分配的是0x00000010 - 0x0000001A这十一个字节,那么给x的空间为0x0000001B - 0x00000025。分配完空间后,给x空间填入字符,由于你输入了11个字符,系统会在字符最后自动添加一个'\n',所以在地址0x00000026处是一个'\n',当然这已经溢出了。同理,给y填入字符的时候也会有溢出,而溢出导致的结果就是本来属于x的空间的第一个字节被改写成了'\n',这就是为什么输出x的时候是空白的原因。这是一个很有趣的溢出BUG,如果你把两个scanf语句调换一个顺序或者把x,y在声明语句中的书写顺序交换一下,结果会是什么呢?不调试的话,你能写出来吗?

[ 本帖最后由 yahwei 于 2014-12-1 12:47 编辑 ]

[qq]949654600[/qq]
2014-12-01 12:44
Mnlink
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2014-11-30
收藏
得分:1 
回复 5 楼 yahwei
恩恩  你说的这个问题很有趣 ,有时间会试试。
2014-12-01 13:04
w15215256447
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2014-11-30
收藏
得分:1 
回复 3 楼 I3NCottonHT
数组是不需要取地址符号的。
2014-12-01 13:07
快速回复:关于 scanf 回车的问题 特别奇怪
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039833 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved