| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1162 人关注过本帖
标题:strcat问题出现.......
只看楼主 加入收藏
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
结帖率:73.33%
收藏
 问题点数:0 回复次数:16 
strcat问题出现.......

tc2.0
#include<stdio.h>
#include <string.h>
main()
{
char s[4][4]={"aef","gasw"};

strcat(s[0],s[1]);
puts(s[0]);
}
输入时s[1]不越界限???(没'\0')怎么?

strcat(s[0],s[1]);更不越界限,?????????????????

搜索更多相关主题的帖子: strcat 
2007-05-26 14:52
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
我在VC++ 6.0的条件,显示d:\c语言\2.cpp(5) : error C2117: 'gasw' : array bounds overflow
提示s[1]越界了。所以不存在你说的。估计是编译器的原因 。

~~我的明天我知道~~
2007-05-26 17:25
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

gasw 这个肯定越界了,最少也得开5个空间.
但不至于出错.

倚天照海花无数,流水高山心自知。
2007-05-26 23:59
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
tc2.0编译?????什么啊,编译器怎么怎么怎么烂

偶是菜鸟鸟偶惧WHO?!!!!
2007-05-27 10:55
chyhome
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-5-13
收藏
得分:0 
s[0]的值不变,s[1]的值将被截取为“gas”,连接后s[1]输出的值还是s[1],不会出错。

2007-05-27 17:55
小子也大叔
Rank: 2
等 级:新手上路
威 望:4
帖 子:143
专家分:0
注 册:2007-4-23
收藏
得分:0 
我也想不明白啊 在编译时 char s[4][4]={"aef","gasw"};这里就要报错(gasw太长 当我删了w后 就可以通过了编译了) 但我想不明白 
为什么strcat(s[0],s[1]);会得出 aefgas的答案呢?不越界吗?

希望一心想学c的加我的群吧~~ 40834003
2007-05-27 18:20
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
收藏
得分:0 
虽然越界,但在内存中它们是连续存放的,所以输出时可以正确输出,但这样有可能出现意想不到的后果,比如你可能覆盖掉以前比较重要的数据,以致程序崩溃

If you shed tears when you miss the sun, you also miss the stars.
2007-05-27 22:55
小子也大叔
Rank: 2
等 级:新手上路
威 望:4
帖 子:143
专家分:0
注 册:2007-4-23
收藏
得分:0 
以下是引用weishj在2007-5-27 22:55:14的发言:
虽然越界,但在内存中它们是连续存放的,所以输出时可以正确输出,但这样有可能出现意想不到的后果,比如你可能覆盖掉以前比较重要的数据,以致程序崩溃

虽然是连续存储 但字串后面系统都会加一个'\0'的啊 当输出第一个字符串后 遇到'\0'都就应该结束了嘛  怎么会继续输出呢????


希望一心想学c的加我的群吧~~ 40834003
2007-05-28 11:38
老糊涂
Rank: 1
等 级:新手上路
威 望:1
帖 子:117
专家分:0
注 册:2007-5-19
收藏
得分:0 

经过我TC实现
#include<stdio.h>
#include <string.h>
main()
{
char s[4][4]={"aef","gasw","haha"};


puts(s[0]);puts(s[1]);puts(s[2]);
}

输出
aef
gaswhaha
gasw
可以看出什么问题~?思考.....


2007-05-28 13:12
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
收藏
得分:0 
以下是引用小子也大叔在2007-5-28 11:38:50的发言:

虽然是连续存储 但字串后面系统都会加一个'\0'的啊 当输出第一个字符串后 遇到'\0'都就应该结束了嘛  怎么会继续输出呢????

这就是越界导致程序崩溃的一个实例啦
拿上面一个例子说明一下,
#include<stdio.h>
#include <string.h>
main()
{
char s[4][4]={"aef","gasw","haha"};


puts(s[0]);puts(s[1]);puts(s[2]);
}
s[1]越界,其'\0'放在了s[2]的首地址,但在初始化s[2]时,s[1]放在s[2]首地址中的'\0'被'h'覆盖掉了,所以这时s[1]在输出时要继续寻找'\0',刚好找到s[2]的结尾,有个'\0',这时输出的s[1]就是gaswhaha了.


If you shed tears when you miss the sun, you also miss the stars.
2007-05-28 13:43
快速回复:strcat问题出现.......
数据加载中...
 
   



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

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