主题:求助 出现段错误
309705759
[专家分:0] 发布于 2010-04-24 16:47:00
#include "stdio.h"
void mystrcpy(char *s,char *t)
{
while ((*s = *t) != '\0')
{
s++;
t++;
}
}
void main()
{
char *s="sssssssssss";
char *t="tttttttttt";
mystrcpy(s,t);
printf("%s",s);
}
这段代码的功能是模仿STRINGCOPY的 为什么编译能通过 但是一运行就出现内存错误 ,我拿到GCC中去编译也是能编译通过,也是运行提示段错误。到底是什么问题? 该怎么改写? 谢谢
回复列表 (共4个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-04-24 17:57:00
首先,请按照标准写成int main
其次,你的s和t都是用字符串常量初始化的,值是不能改的了,你对字符串常量进行处理,当然会报段错误
正确的做法举例:
char s[50],*t="tttttttttt";
然后就可以正常调用你写的函数了。估计lz直接抄老谭书上的代码了,tc不检查篡改的字符指针指向的变量是否是常量
板凳
309705759 [专家分:0] 发布于 2010-04-24 18:54:00
谢谢指教
3 楼
sxm227 [专家分:10] 发布于 2010-04-26 09:14:00
深圳市华信群英科技有限公司与知名通信软件公司正式签订定向输送人才的合作协议
针对想进入IT软件行业的有志人士提供专业的企业内训
实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段
实训前就签订就业安置协议,岗前实训后入职
不仅学费优惠而且是企业定向培训定向招聘,百分百保证就业
有意向请登录www.szctt.com,或加QQ:1179397962做详细咨询
4 楼
cxxcomp [专家分:2370] 发布于 2010-04-26 12:19:00
雪光兄分析的很对。我也这么认为。不过很奇怪的是下述代码在ICL下编译,运行很正常。没有提示错误。
[code=c]
#include <stdio.h>
#include <stdlib.h>
void mystrcpy(char *src, char *dst)
{
while ((*dst = *src) != '\0')
{
src++;
dst++;
}
}
int main()
{
char *src= "sssssssssss";
char *dst= "tttttttttt";
mystrcpy(src,dst);
dst[3] = 'H';
printf("%s\n", dst);
system("pause");
}
[/code]
我来回复