关于strcpy

SendDlgItem 2009-03-11 09:45:34
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ )
{
}
return address ; // 2分
}

请问strcpy源码中为什么要引入一个新的char*变量(address)
...全文
143 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小G 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 flameearth 的回复:]
用来实现链式操作
char *str = strcpy( dst, ss );
[/Quote]

5楼正解
C底层库函数挺多这样子的技巧
比如:
extern void *memcpy(void *dest, void *src, unsigned int count);
zhangchaokun 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
请问strcpy源码中为什么要引入一个新的char*变量(address)
操作习惯问题,传入来的指针最好别改变它,而是多声明一个指针来接收他,除非函数本身有改变该指针的需求.
[/Quote]

正解
  • 打赏
  • 举报
回复
相当于一个临时变量,保存首地址好返回给你。。。
  • 打赏
  • 举报
回复
请问strcpy源码中为什么要引入一个新的char*变量(address)
操作习惯问题,传入来的指针最好别改变它,而是多声明一个指针来接收他,除非函数本身有改变该指针的需求.
grellen 2009-03-11
  • 打赏
  • 举报
回复
保存初始地址,即目标串的首地址
flameearth 2009-03-11
  • 打赏
  • 举报
回复
用来实现链式操作
char *str = strcpy( dst, ss );
valuesun 2009-03-11
  • 打赏
  • 举报
回复
add存的是起始地址,最后返回的要是字符串头。str是复制条件变量。
yangch_nhcmo 2009-03-11
  • 打赏
  • 举报
回复
因为strDest在运算中有执行++的动作.其值不指向其首地址.引入address是为了返回其strDest的首地址
bitxinhai 2009-03-11
  • 打赏
  • 举报
回复
记录原来的地址,因为*strDest++
会改变指针strDest的指针值
chin_chen 2009-03-11
  • 打赏
  • 举报
回复
如果没有char *address = strDes;
*strDes ++ 将指针指向的位置自加,会改变strDes的值。如果return strDes将返回strDes的最后一个字符,并没有返回整个字符串。
address 相当于一个中间变量。无论strDes怎么变化,address始终为整个字符串(原来strDes地址的起始位置)。

65,211

社区成员

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

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