|
1、void *mymemcpy(void *dest, const void* src, size_t n); 5 B! j+ Y! S0 b( [% A( X' ?6 a 内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 - ?9 l, c& o& N8 S. N' I void* memcpy(void* dest,void* src,size_t n){assert(dest != NULL && src != NULL);1 g A0 ~( p, ?- n0 l if(src < dest && (char*)src + n > dest){+ |6 i; m1 W( J/ x* S char* pdst = (char*)dest+n-1;, j) S/ n! K7 a5 t, P char* psrc = (char*)src+n-1;! {3 k6 g' ^$ x: p while(n--){ ?6 V* A1 V8 w4 X) y2 v! n! w0 } *pdst-- = *psrc--; }' \* p% D2 ]+ w3 e) F/ u" q* B }else{# ]5 d" l' e: A5 [$ Y char* pdest = (char*)dest;, J: H$ i- y$ `4 d/ q) L char* psrc = (char*)src; while(n--){ *pdest++ = *psrc++; } } return dest;* H+ c K6 D/ @, [- j( t: u2 Z; s } 2、void *memset(void *s, int c, size_t n); " \+ Q. q9 B, S4 J) h void* memset(void* src,int c,size_t n){4 Q* v6 M5 X \, j; uassert(src != NULL);3 n9 }* ?5 E% M% [" g0 O$ c! B char* psrc = (char*)src;% @) ]- E9 b' }- p; r8 B( I/ b9 n while(n--){2 C6 P4 R* X) `6 @/ C" N& v# E( `, { *psrc++ = (char)c;6 ]: }( P( F# J+ ^ } return src;$ O, {: C, X$ b4 l# M } 3、char* strcpy(char* dest,const char* src); assert(dest != NULL && src != NULL); size_t n = strlen(src); if(src < dest && src + n > dest){ char* pdst = dest + n; *pdst-- = '\0';, [. M j2 A5 {' Z$ Y% W src = src + n - 1; while(n--){0 C! h, c! o1 v: ^# w *pdst-- = *src--; }8 A0 t( ~" @+ _& T+ b. G }else{' x8 J W6 l# f9 d# ^. c char* pdst = dest;6 O0 O6 x8 I2 @% @: }( ?% L while((*pdst++ = *src++) != 0); }& e$ I# U# { w( I x return dest; } 4、char* mystrncpy(char* dest,char* src,size_t n); assert(dest != NULL && src != NULL); if(src < dest && src + n > dest){. l# k6 O% U$ D* _- i; A7 B int m = strlen(src) < n ? strlen(src):n; char* pdst = dest+m; *pdst-- = '\0'; src = src + m-1; while(m--){: L6 M# Z, k; E% R h1 Q *pdst-- = *src--; } }else{* q9 S) V [/ A2 l, Z char* pdst = dest; size_t i = 0; while(i++ < n && (*pdst++ = *src++) != '\0'); if(*(pdst-1) != '\0') *pdst = '\0'; }8 N, Z2 o% h$ [ return dest;$ M; ~, ^$ U7 B# Q! y( g } 5、char* strcat(char* dest,const char* src) assert(dest != NULL && src != NULL); char* pdst = dest;# h3 k" [" w: U) `9 Y while(*pdst != '\0'){ pdst++; } while((*pdst++ = *src++) != '\0'); return dest; }) y j4 A8 |3 h0 v9 [1 ` 6、int strcmp(const char* s1,const char* s2) # C x1 u ]. m$ @ int strcmp(const char* s1,const char* s2){& Y8 a8 S/ L7 x' o4 lassert(s1 != NULL && s2 != NULL);) Z4 i1 [; L/ ~; a: B while(s1 && s2 && *s1 == *s2){ s1++; s2++;1 v) Z' Q4 e5 B# j+ B } return *s1 - *s2; } 7、size_t strlen(const char* s) 3 c% Q7 s. R* f* R" g! f c1 \. P size_t strlen(const char* src){% m6 R, |# v4 [' Q V( e' [# qassert(src != NULL);9 Z) i% s: x( F3 U( b size_t ret = 0;) s5 w7 l8 t6 v' v/ J2 E1 s. v! ~0 O while(*src++ != '\0'){ ret++; }; ?% W2 o6 j2 d" w5 x( p9 p return ret; } |
| 用库省心一些 |
微信公众号
手机版