strcpy函数
【摘要】 网上流行的标准实现
#include <stdio.h> char *strcpy(char *dest, const char *src){ char *address = dest; //保存原目标地址 if (dest == NULL || src == NULL) { return NULL; //也可以使用断言 } while(...
网上流行的标准实现
-
#include <stdio.h>
-
-
char *strcpy(char *dest, const char *src)
-
{
-
char *address = dest; //保存原目标地址
-
if (dest == NULL || src == NULL)
-
{
-
return NULL; //也可以使用断言
-
}
-
-
while((*dest++ = *src++) != '\0') //逐个复制,我们可以看到这是很危险的,如果dest指向src后边一点的内存,就会复制出错。
-
;
-
return address; //返回源地址
-
}
-
-
int main()
-
{
-
char a[1000];
-
char b[1000];
-
gets(a);
-
strcpy(b,a);
-
puts(b);
-
return 0;
-
}
linux源码
-
/**
-
* strcpy - Copy a %NUL terminated string
-
* @dest: Where to copy the string to
-
* @src: Where to copy the string from
-
*/
-
char *strcpy(char *dest, const char *src)
-
{//判断dest与src是否合法应该是程序员的事
-
char *tmp = dest;
-
-
while ((*dest++ = *src++) != '\0')
-
/* nothing */;
-
return tmp;
-
}
freebsd源码
-
char *
-
strcpy(char * __restrict to, const char * __restrict from)
-
{
-
char *save = to;
-
-
for (; (*to = *from); ++from, ++to);
-
return(save);
-
}
-
glibc中的strcpy的代码如下
-
/* Copy SRC to DEST. */
-
char *strcpy (dest, src)
-
char *dest;
-
const char *src;
-
{
-
register char c;
-
char * s = (char *)src;
-
const int off = dest - s - 1;
-
-
do
-
{
-
c = *s++;
-
s[off] = c;
-
}
-
while (c != '\0');
-
-
return dest;
-
}
-
某牛人写的一个汇编的代码
-
char *strcpy(char *dest, const char *src)
-
{
-
__asm
-
{
-
mov eax, dest
-
mov edx, src
-
Begin:
-
mov ecx, DWORD PTR [edx]
-
cmp ecx, 0
-
je End
-
mov DWORD PTR [eax], ecx
-
inc eax
-
inc edx
-
jmp Begin
-
End:
-
mov DWORD PTR [eax], 0
-
mov eax, dest
-
}
-
}
-
利用库函数memcpy
-
char *strcpy(char *dest, const char *src)
-
{
-
const char *end = src;
-
while (*end)//先找到字符串的结束位置
-
{
-
end++;
-
}
-
memcpy(dest, src, end-src+1);//再利用库函数memcpy一次将字符串拷贝过来
-
return dest;
-
}
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/11801461
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)