字符串拷贝函数 strcpy();

loveyouhoney 2010-08-28 04:45:05
如题:

char * strcpy(char *dest, char const *src)
{
assert( (dest != NULL) && (src != NULL));

char *addr = dest;
while( (* dest ++ = *src ++) != '\0');

return addr;
}


这个问题出在哪里?
如果dest和src有重叠部分,上述如何改正。
...全文
535 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiguaqiezi 2010-08-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhaogengzi 的回复:]

strcpy你会发现标准都没有规定.在dst和src的内存发生重叠的时候,调用函数会出现什么情况...只有靠程序员的细心了...
[/Quote]
9楼是没加头函数#include <assert.h>
mymtom 2010-08-28
  • 打赏
  • 举报
回复
strcpy是不需要处理重叠情况的。
如果需要处理的话需要判断src和dst的大小
如果src大于dst正序拷贝
如果src小于dst反序拷贝
如果src等于dst直接返回

char *strmove(char *dst, const char *src)
{
char *save = dst;

if (src > dst) {
for (; *dst = *src; ++src, ++dst)
;
} else if (src < dst) {
for (; *src; ++src, ++dst)
;
for (; dst >= save; --src, --dst)
*dst = *src;
}
return save;
}
WOBUGUAN 2010-08-28
  • 打赏
  • 举报
回复
最好把第一句assert也删掉,不然会有编译错误。
子庚 2010-08-28
  • 打赏
  • 举报
回复
strcpy你会发现标准都没有规定.在dst和src的内存发生重叠的时候,调用函数会出现什么情况...只有靠程序员的细心了...
子庚 2010-08-28
  • 打赏
  • 举报
回复
代码没错,如果lz去baidu一下.strcpy你会发现标记都没有规定.在dst和src的内在发生重叠的时候,调用空上函数会出现什么情况...只有靠程序员的细心了...
WOBUGUAN 2010-08-28
  • 打赏
  • 举报
回复
这是面试题吗?如果是C语言的库函数,即使有重叠也是不用理会的。
  • 打赏
  • 举报
回复
用memcpy!
ctest_ 2010-08-28
  • 打赏
  • 举报
回复
char *strcpy(char *strDest, const char *strSrc);

{

assert((strDest!=NULL) && (strSrc !=NULL)); // 2分

char *address = strDest; // 2分

while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分

NULL ;

return address ; // 2分

}
alweeq86 2010-08-28
  • 打赏
  • 举报
回复
我试了下没问题 只要dest的空间大于src
奋斗小青年 2010-08-28
  • 打赏
  • 举报
回复
char* Strcpy(char *strDest,const char *strSrc)
{
if (strDest == NULL || strSrc ==NULL )
return NULL;
if (strDest ==strSrc)
return strDest;
char *tempptr = strDest;
while((*strDest++=*strSrc++) != '\0')
;
*strDest = '\0';
return tempptr;
}
  • 打赏
  • 举报
回复
[Quote=引用楼主 loveyouhoney 的回复:]
如题:

char * strcpy(char *dest, char const *src)
{
assert( (dest != NULL) && (src != NULL));

char *addr = dest;
while( (* dest ++ = *src ++) != '\0');

return addr;
}

……
[/Quote]

将源src拷贝给一个tmp数组(预期大一点)后再赋值给目的dest!
luodonglong 2010-08-28
  • 打赏
  • 举报
回复
dest没有申请内存 应该不可以吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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