首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
C/C++
C语言
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
关于这个小程序的段错误
加为好友
发送私信
在线聊天
RookieAC
RookieAC
等级:
可用分等级:
中农
总技术专家分:
7
总技术专家分排名:
237089
揭帖率:
84.00%
发表于:
2008-08-21 12:49:37
楼主
#include <stdio.h>
void mystrcat(char *s,char *t)
{
while(*s)
++s;
while(*s++=*t++)
;
}
main()
{
char *s="ab";char *t="cd";
char *p=s;
printf("%s\n",p);
printf("%d",sizeof(t));
mystrcat(s,t);
printf("%s\n",p);
}
用gcc编译,提示说段错误,望有人可以帮着解释一下!
问题点数:
20
回复次数:
13
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hqin6
!独行
等级:
可用分等级:
中农
总技术专家分:
4627
总技术专家分排名:
4840
发表于:
2008-08-21 12:51:35
1
楼 得分:
0
No problems!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
xkyx_cn
飞翔的鱼
等级:
可用分等级:
富农
总技术专家分:
16355
总技术专家分排名:
870
2
发表于:
2008-08-21 12:53:53
2
楼 得分:
0
s,t指向字符串常量区,不可以改写其内容
可以用数组,记得源字符串的空间要足够大,能容纳下连接后的字符串:
char s[10] = "ab";
char t[5] = "cd";
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
matrixcl
等级:
可用分等级:
长工
总技术专家分:
47
总技术专家分排名:
142410
发表于:
2008-08-21 12:56:32
3
楼 得分:
0
2楼正解。
楼主的代码就算编译通过运行也是要出错的,内存越界。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lbh2001
liubaohua
等级:
可用分等级:
中农
总技术专家分:
343
总技术专家分排名:
49581
发表于:
2008-08-21 12:58:09
4
楼 得分:
0
引用 2 楼 xkyx_cn 的回复:
s,t指向字符串常量区,不可以改写其内容
可以用数组,记得源字符串的空间要足够大,能容纳下连接后的字符串:
char s[10] = "ab";
char t[5] = "cd";
我觉得t无所谓,只要s必须定义为长度足够大的字符数组即可,因为要写入。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
xqls_xqls
小桥流水
等级:
可用分等级:
贫农
总技术专家分:
543
总技术专家分排名:
37733
发表于:
2008-08-21 12:58:51
5
楼 得分:
0
while(*s++=*t++) 改为:
while(*s++
==
*t++)
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
taojian_hhu
红烧肉
等级:
可用分等级:
贫农
总技术专家分:
348
总技术专家分排名:
46917
发表于:
2008-08-21 13:10:29
6
楼 得分:
0
s的空间至少要等于原来s的字符数+t的字符数+1
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
RookieAC
RookieAC
等级:
可用分等级:
中农
总技术专家分:
7
总技术专家分排名:
237089
发表于:
2008-08-21 13:10:47
7
楼 得分:
0
引用 4 楼 lbh2001 的回复:
引用 2 楼 xkyx_cn 的回复:
s,t指向字符串常量区,不可以改写其内容
可以用数组,记得源字符串的空间要足够大,能容纳下连接后的字符串:
char s[10] = "ab";
char t[5] = "cd";
我觉得t无所谓,只要s必须定义为长度足够大的字符数组即可,因为要写入。
是这样的,这些我都清楚!
我只是想理解下深层次的段错误的原因!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lbh2001
liubaohua
等级:
可用分等级:
中农
总技术专家分:
343
总技术专家分排名:
49581
发表于:
2008-08-21 13:11:18
8
楼 得分:
0
引用 5 楼 xqls_xqls 的回复:
while(*s++=*t++) 改为:
while(*s++==*t++)
这一改就无法完成任务啰,三思,阿弥陀佛
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lala_benben
啦啦啦!接分了。。
等级:
可用分等级:
富农
总技术专家分:
696
总技术专家分排名:
25467
发表于:
2008-08-21 13:46:09
9
楼 得分:
0
引用 2 楼 xkyx_cn 的回复:
s,t指向字符串常量区,不可以改写其内容
可以用数组,记得源字符串的空间要足够大,能容纳下连接后的字符串:
char s[10] = "ab";
char t[5] = "cd";
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
tgh621
虽然我是菜鸟,但是我很勤奋
等级:
可用分等级:
贫农
总技术专家分:
654
总技术专家分排名:
26600
发表于:
2008-08-21 13:48:34
10
楼 得分:
0
char *s="ab";char *t="cd";
s指向的是静态区,你不能对s指向的数据进行操作
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
realdragon2
大宝
等级:
可用分等级:
贫农
总技术专家分:
427
总技术专家分排名:
45959
发表于:
2008-08-21 14:29:37
11
楼 得分:
0
深层次原因就是s所指向的字符串常量位于内存常量区,是不可写的; 需要将s设置为数组变量或者用malloc函数申请内存;
比如:
char s[10]="ab"; 此时开辟的10个字节的空间位于内存的栈区,可写.
或者: s=(char *)malloc(10). 再写入.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yuhaozx
等级:
可用分等级:
贫农
总技术专家分:
335
总技术专家分排名:
46624
发表于:
2008-08-21 15:44:52
12
楼 得分:
0
1、
学习
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lunarfan
简洁就是美
等级:
可用分等级:
短工
总技术专家分:
662
总技术专家分排名:
28478
发表于:
2008-08-21 16:11:32
13
楼 得分:
0
常量区常量区不可改写,改用字符数组
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友