1、void *mymemcpy(void *dest, const void* src, size_t n); . L* _$ d& W8 S0 u& u 内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 7 S9 B, U9 o) O3 _2 Z3 V: k void* memcpy(void* dest,void* src,size_t n){assert(dest != NULL && src != NULL); 5 j; \7 p* A! Y! N5 [( l# B7 q if(src < dest && (char*)src + n > dest){! G+ `. N5 L( J& ^5 C char* pdst = (char*)dest+n-1; char* psrc = (char*)src+n-1; while(n--){3 L# U3 @! ?9 V4 w& V0 G *pdst-- = *psrc--; }. u* O0 t0 d @0 \6 g9 k }else{ char* pdest = (char*)dest; char* psrc = (char*)src;1 X' U- h# t+ ? while(n--){ *pdest++ = *psrc++;1 `) h. O4 q& L, w: ]; a& k }: n+ a9 ~$ w0 E }1 p1 B; O( s! W# G$ U' ^0 J. I+ d6 C return dest; }7 s# e0 ~, j! V1 q& H 2、void *memset(void *s, int c, size_t n); assert(src != NULL);8 C8 i3 S. F) ^, ~& h char* psrc = (char*)src; while(n--){6 h$ W: ^( G% |! H *psrc++ = (char)c; } return src; }$ C# P+ f, E* G5 a 3、char* strcpy(char* dest,const char* src); assert(dest != NULL && src != NULL); & \! R9 L( P( W( o2 Z" x size_t n = strlen(src); if(src < dest && src + n > dest){5 e" B6 V, a% ` |, D4 `: t8 a8 D char* pdst = dest + n; *pdst-- = '\0'; src = src + n - 1;5 B3 ~2 {0 _' M+ r0 z* M$ o while(n--){ *pdst-- = *src--; } }else{ char* pdst = dest; while((*pdst++ = *src++) != 0); }- f* E5 D: g! p, ]3 O8 y2 `/ o return dest;7 A5 ?: R* m0 D% _- C" d" P } 9 h- t2 _( J n1 q1 E0 v 4、char* mystrncpy(char* dest,char* src,size_t n); " }! ?: l1 z8 ^8 f char* strncpy(char* dest,const char* src,size_t n){. X4 K5 ~+ o5 s9 G2 y5 U7 bassert(dest != NULL && src != NULL);* x7 X1 y" [* ^5 p" C4 A n# X if(src < dest && src + n > dest){( E9 [# N- B1 Q7 a; x int m = strlen(src) < n ? strlen(src):n; char* pdst = dest+m;. K' w( O( p* }& K *pdst-- = '\0'; src = src + m-1; while(m--){, \* h/ M3 k1 k3 O1 h- A- h4 J5 s *pdst-- = *src--;: u$ j( m9 M3 A# D1 Q2 \) p } }else{ char* pdst = dest; size_t i = 0;+ h+ Z a+ w) K+ d2 B3 O, o while(i++ < n && (*pdst++ = *src++) != '\0');$ z- F# [! B0 a @$ v if(*(pdst-1) != '\0') *pdst = '\0'; } return dest; } 5、char* strcat(char* dest,const char* src) assert(dest != NULL && src != NULL); char* pdst = dest; while(*pdst != '\0'){ f* b/ ^. B! |4 b. l0 J$ E pdst++; } while((*pdst++ = *src++) != '\0'); return dest;5 H& Z, g8 I) D }* J, g+ D* W- q9 E1 K+ G# ? 6、int strcmp(const char* s1,const char* s2) assert(s1 != NULL && s2 != NULL); while(s1 && s2 && *s1 == *s2){ s1++; s2++; }; K0 Y6 P9 h# D' h) }) N return *s1 - *s2; }) n* G8 ?: ~. {" I: _0 O/ w, _ 7、size_t strlen(const char* s) assert(src != NULL); size_t ret = 0; w m' k# H; L: K9 v. r7 N while(*src++ != '\0'){ ret++; }7 w5 g9 B+ y- t6 n5 n2 J+ H6 |* D; R return ret; }% O) v6 T( x7 F8 k |
用库省心一些 |