请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C/C++常见库函数实现

[复制链接]
gaosmile 发布时间:2020-7-12 19:22
1、void *mymemcpy(void *dest, const void* src, size_t n);

# W0 `& T+ W! ~* f
内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
" D1 R1 _! B) U* a- q- D, R
void* memcpy(void* dest,void* src,size_t n){
# x, Z' t8 c7 b) T    assert(dest != NULL && src != NULL);
( \( [$ ]) i. x2 U2 K/ ^. Y
! X' g4 E8 {% l$ L    if(src < dest && (char*)src + n > dest){$ W. u3 z4 _- O
        char* pdst = (char*)dest+n-1;) o7 ^" o& B9 x, v. @1 z( c
        char* psrc = (char*)src+n-1;: J0 I  m1 ?; y* s) d7 h0 G
        while(n--){7 f6 P1 Q& i) k
            *pdst-- = *psrc--;
3 P6 j  i9 T+ O7 w$ p        }
- l7 s; T4 w" Y( v) l- y9 K    }else{
. l3 o8 I" [  S4 l        char* pdest = (char*)dest;$ a" V% Y1 G# J& v
        char* psrc = (char*)src;
; y- Z6 q9 J* w        while(n--){) V- b) v+ D. F; }* S0 M
            *pdest++ = *psrc++;
, I+ a0 z% }  T+ F  h        }- q  k1 U* S3 B1 e4 W
    }1 D$ Q( L) e3 b- v- u& ~
    return dest;
+ r9 X7 v* m  W) [/ d" P5 R}

4 ?* N* w5 }% {, I# l4 f1 @
2、void *memset(void *s, int c, size_t n);
% T# a/ m! Z2 w3 k5 g( M, {8 L
void* memset(void* src,int c,size_t n){3 c$ q* F4 d0 k6 K/ D
    assert(src != NULL);
  f5 m8 Y1 I. l# E$ A) }! I. ]: k3 o0 A    char* psrc = (char*)src;5 V; J( l# [; h- f. n
    while(n--){
; v8 e  a# `5 F- @- `# a" u        *psrc++ = (char)c;
) ~: ]/ c7 g5 T+ \7 B/ b4 W    }- f$ x. j# ?2 |5 u) L
    return src;
4 |8 l, r% j0 H7 ^0 [- k9 f}

( L, p% r2 T7 L, H
3、char* strcpy(char* dest,const char* src);
char* strcpy(char* dest,const char* src){
. |0 X* l, o9 a6 z6 @    assert(dest != NULL && src != NULL);
: q$ O* V+ S- @0 G
& g7 s2 r# W# j9 f, W0 ~. _    size_t n = strlen(src);
; `& d3 Q/ [# ], q    if(src < dest && src + n > dest){! F) H/ Z1 }& F: k8 k4 W3 o
        char* pdst = dest + n;
6 v+ |9 X- ?& ~8 B9 E  x# D        *pdst-- = '\0';6 D$ q& P* I$ N
        src = src + n - 1;
% p; N4 o& q: z& r        while(n--){
0 Z2 `4 F/ ~) |7 {            *pdst-- = *src--;8 _$ J- z  k& O' F( R
        }
. o: z" ~: k8 I- o    }else{
1 B% l3 c- K/ k        char* pdst = dest;
$ t5 g- [, {  n+ f6 `        while((*pdst++ = *src++) != 0);
8 ?- }! C0 O0 y' _  v    }8 A+ \* u6 B/ @) H) _5 d& ]9 [7 K
    return dest;
7 H; e& u$ [- G0 I! K}
  `7 l: e6 T' \, a- u* P4 ^% t
4、char* mystrncpy(char* dest,char* src,size_t n);

" @. S  q8 j9 x
char* strncpy(char* dest,const char* src,size_t n){
. |8 {$ U7 R2 c! l' }/ @; q    assert(dest != NULL && src != NULL);5 l) e1 C4 I- c- i4 d. {$ `

% b0 E3 y1 q' K7 ?* u    if(src < dest && src + n > dest){
9 l% T7 O9 [# I" X$ m        int m = strlen(src) < n ? strlen(src):n;/ e5 X- G9 b8 D0 [' Y1 `
        char* pdst = dest+m;
- U/ K# u+ x, M; P        *pdst-- = '\0';
1 m! |* \, c' H        src = src + m-1;
5 G* M0 X% q" Y8 a& r  r/ a        while(m--){
+ d* X- _# g2 G. @. p( o            *pdst-- = *src--;3 S$ f- ]# F. o( s, d0 ~- P7 Q8 [0 ]2 p
        }, a0 r/ y0 W$ W8 [; L6 u
    }else{8 m: Y# l$ S& f% F- N- n
        char* pdst = dest;
. P- D/ d- K" ?7 o2 x+ D        size_t i = 0;
1 D& D0 o) z. ^$ v1 y        while(i++ < n && (*pdst++ = *src++) != '\0');
( a. ~: G$ Q. U8 e9 S, m" U( c- t        if(*(pdst-1) != '\0') *pdst = '\0';
6 ~( r2 b  B! k: m! x7 p9 L" |1 e( n    }- i' J) L. m7 b6 L% K0 B
    return dest;9 |% U5 t5 ~9 s
}

7 ]- L6 @* _* M3 K8 n0 x: I; L
5、char* strcat(char* dest,const char* src)
9 x: {! t) Z% V5 i6 O- I% H6 U) A/ H
char* strcat(char* dest,const char* src){9 x* i. x5 w/ q% i% ]
    assert(dest != NULL && src != NULL);5 v# G1 _$ u+ n- k
    char* pdst = dest;$ e: x% j) F1 L( v
    while(*pdst != '\0'){
- }3 Q% w/ R* k" W, z8 Q" r        pdst++;9 T  t0 I, G9 p2 G
    }& x/ m6 Y4 @7 r3 c+ e4 e7 F
    while((*pdst++ = *src++) != '\0');) y' b; |' c; N5 P4 o
    return dest;
' l; j& O& C+ t& O) O, B, `}
3 K& b+ B+ i7 k; P  c0 p1 \
6、int strcmp(const char* s1,const char* s2)

6 c% s. Z3 s5 j( {# a* f( J1 D
int strcmp(const char* s1,const char* s2){, h: S# M/ D- u
    assert(s1 != NULL && s2 != NULL);
9 ^! W- t5 a. R    while(s1 && s2 && *s1 == *s2){4 l% h: I  E, u9 g3 r6 @, I5 w
        s1++;
% g- w, @- H6 k        s2++;
' Z3 h: S6 M5 P! Y1 |' u3 D6 s    }+ J+ r, Y2 K5 m& t
    return *s1 - *s2;
, T, N; M5 ^, {7 E4 ~. u}

" A. |1 Y+ J7 A0 o/ P" L
7、size_t strlen(const char* s)

/ q; b+ W2 m% e4 f! x, i4 `* t
size_t strlen(const char* src){
7 O7 l: u6 }% {: Y; L& V    assert(src != NULL);. v& T- v, r: g6 a$ y4 ]1 M! V
    size_t ret = 0;
4 ?5 K2 `- f. ?1 q    while(*src++ != '\0'){( p' o0 N& t8 P4 h
        ret++;& t' v& g5 S. f- c4 f
    }# d8 @) N* b; @# Q$ g, Y* Y
    return ret;
9 v5 c" q3 R- n1 r# `* o9 u& l}

0 p4 }- h! O5 K# o
收藏 1 评论2 发布时间:2020-7-12 19:22

举报

2个回答
wyxy163@126.com 回答时间:2020-7-13 08:42:37
提示: 作者被禁止或删除 内容自动屏蔽
goyhuan 回答时间:2020-7-13 08:45:28
用库省心一些

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版