C语言小程序找错

来源:百度知道 编辑:UC知道 时间:2024/09/24 12:09:55
C里有一个strcpy的库函数,我想自己把它写出来用
程序如下:
char *strcpy(char *s1,char *s2)
{
char *ss=s1;
while(*s2!='\0')
{
*s1=*s2;//*******************
s1++;
s2++;
}
return ss;
}
#include<stdio.h>
void main()
{
char *p="tiddyruxpin";
char *q="e";
printf("%s\n",strcpy(q,p));
}
程序编译和连接都没错,就是一运行就出现内存错误,找好久也看不出为何?我用单步调试,运行到************那个地方,就不往下走了,貌似
*s1=*s2;这句有问题,但不知道问题在哪,拿来请教高手,帮我看下,感激不尽。。。

char *p="tiddyruxpin";
char *q="e";

因为q只有一个字符,p长度大于Q,拷贝时候会访问q后面的内存空间并进行覆盖。。
这时候就会出现内存问题咯。。
建议用数组实现,对二者的长度有要求的。。
q不能比p短。

char *q="e";
??????????
检查下

个人理解:
对char *p="tiddyruxpin"; 这句话,编译时候是没有问题的。但执行的时候要考虑到一些问题。
char *p这个语句为p开辟了存储空间,但对p赋值时,“tiddyruxpin”代表了什么呢?一个常量的地址,再深入我也不明白,但我知道,常量是不可以赋值的。
所以,当你把常量传入函数中,并试图赋值时(*s1=*s2;//*******************)问题就出现了。
其实可以这样,
char p[]="tiddyruxpin";
char q[]="e";
执行就不会有问题了。
当然,你还是要注意一下输入字符串的长度-_-!