c++函数传递指针问题

laozi257 2009-01-20 09:26:29
vs2005下编译运行.
简单的复制字符串的小程序:
#include<iostream>
using namespace std;

char* myStrcpy(char* s1,const char* s2);

int main()
{
char s1[50]="test";
char* s2="Hello";
cout<<"s2="<<s2<<endl;
cout<<"s1="<<myStrcpy(s1,s2)<<endl;
}

char* myStrcpy(char* s1,const char* s2)
{
char* s=s1;
while(*s++=*s2++);
return s1;
}//不明白这里为什么要把传递进来的s1赋给s再返回,结果正确,s1被赋值为Hello

如果将上面的函数myStrcpy改成
char* myStrcpy(char* s1,const char* s2)
{
while(*s1++=*s2++);
return s1;
}//这样s1的结果就是空字符串

请问这是为什么啊?还请大家指教!
...全文
53 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengcantao 2009-01-23
  • 打赏
  • 举报
回复
一楼解释的很完美!!!
vss2008 2009-01-22
  • 打赏
  • 举报
回复
up
noenoughmemory 2009-01-22
  • 打赏
  • 举报
回复
up
kikikind 2009-01-21
  • 打赏
  • 举报
回复
1楼正解~~~先用另一个指针来做复制~~这样原指钟所指位置就不会改变~~
wangchongcy 2009-01-21
  • 打赏
  • 举报
回复
char *s是指针,你让*s1++,s1指针自然指向下一内存单元,循环之后必定指向最后内存单元,所以为空
biweilun 2009-01-20
  • 打赏
  • 举报
回复
这是当然的结果了。因为在正确的myStrcpy中,S1指向的是你的test字符串首,然后使用s进行遍历他,依次更改了S1地址后面的每一个地址对应的字符,S1没有变还是指向原"test"的首地址。
在错误的myStrcpy中,你的指向首地址的指针都被你用来遍历了,s2中的值确实是复制到了原s1对应的那块内存中,但是s1他在赋值的同时也后移了,最后s1指向的是原s1的最后结尾,自然是指向空了。

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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