W($}G_j[B1
void * memcpy (void * dst, const void * src,size_t count) f8yE>qJP
{ b^[Ab:`}[V
void * ret = dst;//可支持链式编程,一个函数完成两个功能。 0Q?XU.v
while (count--) m2 0:{fld
{ e P]L
*(char *)dst = *(char *)src; ru#,pJ=O(
dst = (char *)dst + 1; NUBf>~_}
src = (char *)src + 1; HriY-=ji>a
} h"Qp e'D}
mw2/jA7
return(ret); 04ZP\
} 7kX;|NA1
void * memset(void *dst, int val,size_t count) Bx9R!u5D
{ )Il)
H
//把val传给*dst时两个变量类型要相同,需要用到强制类型转换 KY5 it9e
}+/j /es{]
//assert(dst);//这里需要检验dst的有效性 0c6b_%Rd
char* ret=(char*)dst; = F*SAz
while (count--) DFDlp
{ +9LIpU&5
*ret++ = (char)val; Kvx~2ZMx6
} .V~z6
return dst; }7?n\I+n"
} =PU!hZj"L
@">^2
char * strstr(const char *str1, const char *str2) ViZ Tl~
{ gY!+x=cx0
char *cp = (char *)str1; ^j~CYzmt
char *s1, *s2; 1jHugss9|
'uy\vR&Pz
if (!*str2) fkKk/M>1
return((char *)str1); Fsdp"X.
V46=48K.
while (*cp) ^@91BY
{ "~V|p3
s1 = cp; <!qN<#$y
s2 = (char *)str2; 2!@ER i
J}zN]|bz
while (*s2 && !(*s1 - *s2)) LIah'6qR
s1++, s2++; py-5 :g}d
9:\#GOg
if (!*s2) U5[,UrC
return(cp); 3lh^maQ]
0NB5YQ8_]
cp++; "UM*(&
} ve3-GWT{C
5xb1FH d:
return(NULL); ]h3{MTr/
} cc0e(\
6'S q|@VOi
char * strncpy( char * dest, const char * source, unsigned long count ) ^ "D
g$?kL
{ QV%,s!_b
{zNFp#z
char *p = dest; aG*Mj;J
e&k=fV
while (count && (*p++ = *source++)) count--; rl__3q
:Vnus
@#r
while(count--) <>l!
f.e4 C,
*p++ = '/0'; $ca>bX]
jhx @6[
return(dest); gH
u!~l
^U;r>[T9h
} Kk9eJ\
size_t strlen(const char * str ) (?ofL|Cg(
?S2!'L
{ {G i:W/jJ
Ld4Jp`Zg
const char *p = str; A<*G;
<&m
`)FJ
while( *p++ ) ; kN8?.V%Utw
fa#5pys
return( (int)(p - str - 1) ); q% pjY
L=v"5)m2R
}