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

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

[复制链接]
gaosmile 发布时间:2020-7-12 19:22
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){
/ a' v0 E9 [3 d7 D. ~8 |* Q& Y- ~    assert(dest != NULL && src != NULL);1 g  A0 ~( p, ?- n0 l

! P( L" X( U5 J* U* ~9 W, Q    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' X# C% t) C" H" j        }' \* 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;
% `) D  c, v0 e3 F        while(n--){
, L7 F+ P5 T8 s9 ~            *pdest++ = *psrc++;
- p) X/ `" _& @/ u" m: L        }
  ?5 R" t3 E# \: s% m$ j8 t    }
& ^# V, \6 E6 `! e    return dest;* H+ c  K6 D/ @, [- j( t: u2 Z; s
}

( C+ o! @! ?0 x/ F4 `+ r
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; u
    assert(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+ ^
    }
0 ~- C7 l4 S8 R) V    return src;$ O, {: C, X$ b4 l# M
}

& K$ _( W- v$ H3 }8 n% d8 h
3、char* strcpy(char* dest,const char* src);
char* strcpy(char* dest,const char* src){
8 c/ w+ [' g" d7 F/ x    assert(dest != NULL && src != NULL);
/ R4 D8 c/ p* z: V- o# B9 Y
1 _1 A& x* j9 J7 x1 O! ~% B! q    size_t n = strlen(src);
# y7 j9 \8 v$ q3 Z7 J& I9 ]( Y" U    if(src < dest && src + n > dest){
7 {$ e4 T6 k8 s3 I        char* pdst = dest + n;
$ K, a. W/ i: E; c' Z        *pdst-- = '\0';, [. M  j2 A5 {' Z$ Y% W
        src = src + n - 1;
9 ^5 o4 w7 `4 F0 C* y0 |: m6 u        while(n--){0 C! h, c! o1 v: ^# w
            *pdst-- = *src--;
- r0 x9 h- g9 R" ?+ {& N! b2 M        }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);
! Y* J+ i7 V) e4 f4 x3 r4 f6 t    }& e$ I# U# {  w( I  x
    return dest;
4 r( Y- x6 Y) R- c# D' J}

, H! m) H9 d8 L- i! M9 t
4、char* mystrncpy(char* dest,char* src,size_t n);

2 n- G- Y  R9 w7 \1 D
char* strncpy(char* dest,const char* src,size_t n){
+ ]  w# m8 h& }* U, r6 i    assert(dest != NULL && src != NULL);
4 L. z7 w5 L0 i) L
5 p" C+ }' _+ Q. M+ }: m& |    if(src < dest && src + n > dest){. l# k6 O% U$ D* _- i; A7 B
        int m = strlen(src) < n ? strlen(src):n;
7 D1 C; ?" _3 \) H- ~        char* pdst = dest+m;
5 O3 S2 y+ V( O* A, b* V        *pdst-- = '\0';
" q8 K6 ~# [5 }: v. M        src = src + m-1;
* v- g1 n! p, X0 v; H( }; C" {        while(m--){: L6 M# Z, k; E% R  h1 Q
            *pdst-- = *src--;
8 q  m+ x7 i" F+ ?- G7 j. ?        }
& c' m) [  C7 D, i" l    }else{* q9 S) V  [/ A2 l, Z
        char* pdst = dest;
2 H, ]7 L7 T  f& c4 v9 T        size_t i = 0;
# V: N* T4 S$ r) u- y        while(i++ < n && (*pdst++ = *src++) != '\0');
- h& C  ^( e7 H' a        if(*(pdst-1) != '\0') *pdst = '\0';
7 d( G! g5 w; }. F. o    }8 N, Z2 o% h$ [
    return dest;$ M; ~, ^$ U7 B# Q! y( g
}

6 a0 f1 i% c8 H& S4 p$ _
5、char* strcat(char* dest,const char* src)

1 f- z9 z* O9 V+ O
char* strcat(char* dest,const char* src){& G, ?* ~3 P9 f3 i/ T
    assert(dest != NULL && src != NULL);
4 u9 t+ E: m2 P5 L  F2 q    char* pdst = dest;# h3 k" [" w: U) `9 Y
    while(*pdst != '\0'){
* N% a4 b" v* r; D1 `7 |* \- z        pdst++;
& ^* ]% Z- C% l3 n    }
- L; K* P3 u; J- h+ O( h    while((*pdst++ = *src++) != '\0');
2 i6 y; H2 S* _$ j/ H5 t    return dest;
+ z1 \% W. z" C6 D6 B$ x: N}
) 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 l
    assert(s1 != NULL && s2 != NULL);) Z4 i1 [; L/ ~; a: B
    while(s1 && s2 && *s1 == *s2){
) P% m2 H9 J! F1 `9 \! d        s1++;
5 Q: q2 f, P) k        s2++;1 v) Z' Q4 e5 B# j+ B
    }
, M: }6 p+ H! M# R* D! B0 e1 ^    return *s1 - *s2;
% r: q) k, d6 I& B* ~2 {, D}

2 G! d; M. K* c5 `! g% q  v
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' [# q
    assert(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'){
+ g! v/ J! u; `- {; i        ret++;
& `- \3 }5 z; X  z1 F    }; ?% W2 o6 j2 d" w5 x( p9 p
    return ret;
; `( G" M+ H0 A6 f: t}

# S" q" k5 J1 ]8 t; t0 w
赞 收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版