memcpy函数源代码

zzsu7710 2004-11-05 08:20:03
有哪位知道这些函数的源代码啊?非常感谢!
strcpy, memcpy, strncpy, strstr
...全文
612 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzsu7710 2004-11-05
  • 打赏
  • 举报
回复
要参加趋势的笔试,有没有笔试过的,提一些经验啊?
柯本 2004-11-05
  • 打赏
  • 举报
回复
不过VC及BC,BCB等源码很复杂且一般没有移植性,为了追求效率,很多是用汇编写的
如BCB的strcpy:
;[]-----------------------------------------------------------------[]
;| STRCPY.ASM -- copy string src to string dest |
;[]-----------------------------------------------------------------[]

;
; C/C++ Run Time Library - Version 11.0
;
; Copyright (c) 1991, 2002 by Borland Software Corporation
; All Rights Reserved.
;

; $Revision: 9.4.2.1 $

include RULES.ASI

; Segments Definitions

Header@

;-----------------------------------------------------------------------
;
;Name strcpy - copy string src to string dest
;
;Usage char *strcpy (char *dest, const char *src);
;
;Prototype in string.h
;
;Description Copy the ASCIIZ string *src to the buffer *dest. It is the
; callers responsibility to ensure that the dest buffer is
; large enough to contain the string, and to guard against
; supplying NULL arguments.
;
;Return value strcpy returns dest.
;
;-----------------------------------------------------------------------

Code_seg@

Func@ strcpy, _EXPFUNC, _RTLENTRYF, <pointer dest>, <pointer src>
Link@ esi,edi
mov edi,src ; get source string
mov esi,edi ; copy to esi and edi
mov ecx,-1
xor al,al ; search for null at end of source string
cld
repne scasb ; scan one character past null
not ecx ; ecx = no. of characters including null
mov edi,dest ; get destination buffer
mov eax,edi ; copy to eax for return value
mov edx,ecx ; save count
shr ecx,1 ; calculate longword count
shr ecx,1
cld
rep movsd ; copy longwords
mov ecx,edx ; get back count
and ecx,3 ; calculate remainder byte count (0-3)
rep movsb ; copy remaining bytes

Unlink@ esi,edi
Return@

EndFunc@ strcpy

Code_EndS@

end
boyzhang 2004-11-05
  • 打赏
  • 举报
回复
GZ
柯本 2004-11-05
  • 打赏
  • 举报
回复
VC下也有啊:
在\Program Files\Microsoft Visual Studio\VC98\CRT\SRC目录下:
有关mem的
1998-06-17 00:00 1,438 MEMCCPY.C
1998-06-17 00:00 1,319 MEMCHR.C
1998-06-17 00:00 1,418 MEMCMP.C
1998-06-17 00:00 1,933 MEMCPY.C
1998-06-17 00:00 2,694 MEMICMP.C
1998-06-17 00:00 2,576 MEMMOVE.C
1998-06-15 00:00 5,485 MEMORY
1998-06-17 00:00 2,902 MEMORY.H
1998-06-17 00:00 1,558 MEMSET.C
...
zzsu7710 2004-11-05
  • 打赏
  • 举报
回复
我在vc下面就没有找到源码,郁闷啊
柯本 2004-11-05
  • 打赏
  • 举报
回复
----------------------------------
#include <string.h>

memcmp(const void *s1, const void *s2, size_t n)
{
short i;
register const signed char * a1, * a2;

a1 = s1;
a2 = s2;
while(n--)
if(i = *a1++ - *a2++)
return i;
return 0;
}
--------------------------------------------------------------------
#include <string.h>

#ifdef _PIC16
far char *
strcpy(far char * to, register const char * from)
#else _PIC16
char *
strcpy(char * to, register const char * from)
#endif _PIC16
{

#ifdef _PIC16
register far char * cp;
#else _PIC16
register char * cp;
#endif _PIC16

cp = to;
while(*cp++ = *from++)
continue;
return to;
}
--------------------------------------------
#include <string.h>

#ifdef _PIC16
far char *
strncpy(register far char * to, register const char * from, register size_t size)
#else _PIC16
char *
strncpy(register char * to, register const char * from, register size_t size)
#endif _PIC16
{

#ifdef _PIC16
register far char * cp;
#else _PIC16
register char * cp;
#endif _PIC16

cp = to;
while(size) {
size--;
if(!(*cp++ = *from++))
break;
}
while(size--)
*cp++ = 0;
return to;
}
-------------------------------------------
#include <string.h>

__CONST char *
strstr(register const char * s1, register const char * s2)
{
while(s1 && *s1) {
if(strncmp(s1, s2, strlen(s2)) == 0)
return (__CONST char *)s1;
s1 = strchr(s1+1, *s2);
}
return NULL;
}
-------------------------------------------
这是HT-PIC的源码,其实大部分编译器都有库的源码

64,646

社区成员

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

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