strcpy源码的问题

qzk1993 2016-04-30 10:42:17
代码如下:我采用了链式复制,但结果不对
#include<iostream>
char* Strcpy(char* d,const char* s)
{
while ((*d++ = *s++) != '\0')
;
return d;
}
int main()
{
using namespace std;
char* d =new char[20] ;
char s[20] = "Hello world!";
char* e=new char[20];
Strcpy(e,Strcpy(d,s));
cout << d << endl;
cout << e << endl;
return 0;
}




我把他们分开复制了

#include<iostream>
char* Strcpy(char* d,const char* s)
{
while ((*d++ = *s++) != '\0')
;
return d;
}
int main()
{
using namespace std;
char* d =new char[20] ;
char s[20] = "Hello world!";
char* e = new char[20];
Strcpy(d, s);
Strcpy(e,d);
cout << d << endl;
cout << e << endl;
return 0;
}

结果就对了


还有,我看了网上的strcpy源码,这样改了之后,注意前面的代码
#include<iostream>
char* Strcpy(char* d,const char* s)
{
while ((*d++ = *s++) != '\0')
;
return d;
}
int main()
{
using namespace std;
char* d =new char[20] ;
char s[20] = "Hello world!";
char* e = new char[20];
Strcpy(d, s);
Strcpy(e,d);
cout << d << endl;
cout << e << endl;
return 0;
}

结果就对了


求大神解答
...全文
235 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArthurJava 2016-05-01
  • 打赏
  • 举报
回复
char* Strcpy(char* dst, const char* src)
{
    assert(dst != s);
    char *p = dst;
    while ((*p++ = *s++) != '\0')
        ;
   *p = '\0';
    return dst;
}
encoderlee 版主 2016-05-01
  • 打赏
  • 举报
回复
char* Strcpy(char* d,const char* s) { while ((*d++ = *s++) != '\0') ; return d; } 你要返回拷贝后的字符串,但是经过循环d已经指向了字符串末尾,所以不对,改了以后一开始就保存一个d的副本,最后返回它就对了
Code--Dream 2016-04-30
  • 打赏
  • 举报
回复
#include<iostream> char *Strcpy(char *d, const char *s) { char *dd; dd=d; while ((*d++ = *s++) != '\0'); return dd; } int main() { using namespace std; char *d = new char[20]; char s[20] = "Hello world!"; char *e = new char[20]; Strcpy(e, Strcpy(d, s)); cout << d << endl; cout << e << endl; return 0; } 这样吧
小灸舞 2016-04-30
  • 打赏
  • 举报
回复
楼主第一种写法,return回来的是已经指向字符串末尾\0的地址,必须先保存字符串的首地址才行
dustpg 2016-04-30
  • 打赏
  • 举报
回复
这个函数返回了末尾(end)指针,方便计算复制了多少字节.
qzk1993 2016-04-30
  • 打赏
  • 举报
回复
错了,更改之后的代码是这样
#include<iostream>
char* Strcpy(char* d,const char* s)
{
	char* t = d;
	while ((*t++ = *s++) != '\0')
		;
	return d;
}
int main()
{
	using namespace std;
	char* d =new char[20] ;
	char s[20] = "Hello world!";
	char* e = new char[20]; 
	Strcpy(e,Strcpy(d, s));
	cout << d << endl;
	cout << e << endl;	
	return 0;
}

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧