| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 899 人关注过本帖
标题:scanf函数问题
只看楼主 加入收藏
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
结帖率:94.12%
收藏
已结贴  问题点数:5 回复次数:9 
scanf函数问题
scanf函数中输入的字符串为什么应短于已定义的字符数组的长度
搜索更多相关主题的帖子: scanf 函数 
2010-06-15 18:01
xiaomanaruto
Rank: 6Rank: 6
等 级:侠之大者
帖 子:79
专家分:443
注 册:2010-4-1
收藏
得分:1 
因为只有字符数组所定义的长度内可以存放数据,当输入的字符串过长时,多余的那部分将要存放的地方可能不可写,发生错误
2010-06-15 18:05
DePrince
Rank: 2
等 级:论坛游民
帖 子:13
专家分:35
注 册:2010-6-14
收藏
得分:2 
数组是连续的存储单元
输入的字符串长于已定义的字符数组长度时,会发生溢出,占用其他的字节。。
】用书上的话来说就是有意想不到的后果
2010-06-15 18:09
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
#include<stdio.h>
void main()
{
    char a[2];
    scanf("%s",a);
    printf("%s\n",a);

  }
如果输入aaaa为什么还能输出4个a,不是超过的定义的长度了吗?
2010-06-15 18:12
z9895512
Rank: 2
等 级:论坛游民
帖 子:24
专家分:43
注 册:2010-6-3
收藏
得分:1 
举个例子。你的银行卡密码存在内存的某个地方。
而你现在在写一个程序,有数组A[2],但你却输入了3个数,超出的那个数要找个地方存吧.而这个地方有可能是你已经存了密码的地方。那么密码就被覆盖了。密码就没有了。
这种情况你愿意看到嘛?
额。这是不专业的说法。但是能看明白一点就好~

提醒一下,觉得谁回答还行的话,要记得结贴给分,才不会辜负了大家的帮助。
2010-06-15 20:11
huxiangwenhu
Rank: 4
等 级:业余侠客
威 望:1
帖 子:191
专家分:262
注 册:2010-6-1
收藏
得分:0 
我也觉得有问题,输出少于等于四个的时候不存在溢出的问题,超过四个就出问题了,这是为什么呢?
2010-06-15 21:05
尘埃落雪
Rank: 2
等 级:论坛游民
帖 子:34
专家分:17
注 册:2010-6-7
收藏
得分:1 
如果超出已定义的长度,那么你多余的部分会存在共用的内存部分,这样的话,如果你在运行大的程序的话,内存紧张的话,就会出现不可预测的结果.这是我想的,呵呵
2010-06-15 21:34
陛下
Rank: 2
来 自:南宁
等 级:论坛游民
帖 子:62
专家分:90
注 册:2010-5-15
收藏
得分:0 
我觉得是因为字符串后面还带有一个"/0"的缘故吧它也占位置啊
也占两个字节
2010-06-15 23:06
huxiangwenhu
Rank: 4
等 级:业余侠客
威 望:1
帖 子:191
专家分:262
注 册:2010-6-1
收藏
得分:0 
这个问题就别讨论了,呵呵,毕竟我们都不是傻帽,何必要让内存溢出呢?现在的PC多么大的容量,定义大点就是
2010-06-16 15:02
crkey
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-6-16
收藏
得分:0 
溢出即错误
2010-06-16 15:22
快速回复:scanf函数问题
数据加载中...
 
   



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

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