strcpy函数总题

来源:百度知道 编辑:UC知道 时间:2024/05/23 17:39:14
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 *strcpy(char *s1,char *s2) 是错的! 怎么能定义一个 指针函数?我想说的是,可以定义一个返回值为指针的函数,这个书上有说
3,还有 你说strcpy 这个本来c语言本来就有这个函数是不能再用来自定义函数的!要改名称!我认为不用改名,因为我就在做它,如果一个程序中要用strcpy这个函数,头文件中必须包含#include<sting.h>这一条才行,但我的程序中没有用它,因为我自己在定义strcpy个函数。
还有 这段函数的功能是 让*s1指向的字符串挨个 复制到*s2指向的字符串! 所以 没有返回值的!应该定义为 void。这条我也不同意,它完全可以返回一个指针,书上有例题,你可以自己看看。

程序实现的基本上没有错,但字符结束符'\0',也需要复制的

你关键是用错了,q和p都指向一个常量,不能修改它们的内容的
另外,就算可以修改,q的空间太小,p的空间太大,也会越界的

char *strcpy(char *s1,char *s2)
{

while(*s2!='\0')
{
*s1=*s2;//*******************
s1++;
s2++;
}
*s1=0;
return s1;
}
#include<stdio.h>
void main()
{
char *p="tiddyruxpin";
char q[30]={"e"};

printf("%s\n",strcpy(q,p));
}

s2拷贝到s1
char* strcpy(char* s1,const char* s2)
{
while((*s1++ = *s2++)!='\0');
return *s1;
}

s2拷贝到s1
char* strcpy(char* s1,const char* s2)
{
while((*s1++ = *s2++)!='\0');
return *s1;
}
这个是正解

#include"stdio.h"
void lstrcpy(char *p2,char *p1)
{
while(*p2++=*p1++);
}
main()
{
char *k1="abc def",a[20],*k2;
k2=a;
lstrcp