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

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

[复制链接]
gaosmile 发布时间:2020-7-12 19:22
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){
% ]- j5 f( c/ D+ t7 p. a# ~2 q3 P    assert(dest != NULL && src != NULL);
, |  d0 S' e  }; C% J  b  V5 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;
* @2 O3 a8 w8 s' M! \/ x5 S        char* psrc = (char*)src+n-1;
8 E1 R( T4 p; q' v% E        while(n--){3 L# U3 @! ?9 V4 w& V0 G
            *pdst-- = *psrc--;
+ N$ g' u1 ~2 G. R$ k4 y3 c1 c" x5 T        }. u* O0 t0 d  @0 \6 g9 k
    }else{
% v) k2 e9 b+ \" D# }* C7 [# _' O        char* pdest = (char*)dest;
1 o' g6 C" s, B$ n+ z1 N        char* psrc = (char*)src;1 X' U- h# t+ ?
        while(n--){
4 J- X: s4 O% p            *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;
0 @) x$ N* v# g' g- ~}
7 s# e0 ~, j! V1 q& H
2、void *memset(void *s, int c, size_t n);

6 h' O5 J0 N: K4 R
void* memset(void* src,int c,size_t n){( T; G: V( D& Q: C* r: B
    assert(src != NULL);8 C8 i3 S. F) ^, ~& h
    char* psrc = (char*)src;
$ O" ]# L' E% |- f: w# G    while(n--){6 h$ W: ^( G% |! H
        *psrc++ = (char)c;
' K: L3 d4 t3 L- a2 G    }
$ _5 k: [2 _0 O8 l. I! X- A+ q    return src;
  P& ]; X3 X# d4 C0 g8 }}
$ C# P+ f, E* G5 a
3、char* strcpy(char* dest,const char* src);
char* strcpy(char* dest,const char* src){
& k+ i1 n( h5 B9 P# S    assert(dest != NULL && src != NULL);
3 t% {! E: x9 O4 S& \! R9 L( P( W( o2 Z" x
    size_t n = strlen(src);
8 N$ ^9 j9 l+ B  x5 m2 x& w, D    if(src < dest && src + n > dest){5 e" B6 V, a% `  |, D4 `: t8 a8 D
        char* pdst = dest + n;
! x# E/ g" E" G. G        *pdst-- = '\0';
$ x% d) c! ]  {0 b( c. i        src = src + n - 1;5 B3 ~2 {0 _' M+ r0 z* M$ o
        while(n--){
# Z# T, j5 ^+ `, W# i            *pdst-- = *src--;
1 Z4 u8 J/ t0 y' o3 z        }
0 n$ S' f4 `  f& W' A2 C* Z    }else{
9 n' M3 X! e. m4 T" ]        char* pdst = dest;
5 b# v' I7 @9 T. w* Z        while((*pdst++ = *src++) != 0);
& `! A$ H7 k6 u& i% r4 w, Q    }- 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 b
    assert(dest != NULL && src != NULL);* x7 X1 y" [* ^5 p" C4 A  n# X

0 A5 s# `5 A$ e( `+ o    if(src < dest && src + n > dest){( E9 [# N- B1 Q7 a; x
        int m = strlen(src) < n ? strlen(src):n;
6 B6 f8 w* @. x8 Y" g4 s" t        char* pdst = dest+m;. K' w( O( p* }& K
        *pdst-- = '\0';
9 _- P* X; O& y0 ~* m+ g" g0 T: V        src = src + m-1;
: K: \. A- h, R5 Y/ J: Y        while(m--){, \* h/ M3 k1 k3 O1 h- A- h4 J5 s
            *pdst-- = *src--;: u$ j( m9 M3 A# D1 Q2 \) p
        }
1 {3 @6 r4 i& z% g4 _# y8 v    }else{
# z) y. m/ n) H; U3 V) S        char* pdst = dest;
; ~  ^/ F0 m" U* v        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';
  r3 _5 B2 h% @4 {+ P    }
  J0 ?* {  E9 t* S& w5 `9 p' v    return dest;
3 w# g  f" w9 W6 x* U! L}

* F1 Y1 z! m* U  [' ^( ]5 @
5、char* strcat(char* dest,const char* src)

3 Z2 h) E% Z/ R9 X
char* strcat(char* dest,const char* src){% t6 p% H' H+ W% G' v  A
    assert(dest != NULL && src != NULL);
# t+ j- a2 C: ~! W! H6 J1 P# R; ^) B! @    char* pdst = dest;
2 i* K9 y" U- d+ i+ w0 @    while(*pdst != '\0'){  f* b/ ^. B! |4 b. l0 J$ E
        pdst++;
& s( l" T: l! J  F) Y- R% W    }
) |& h0 C  p! x2 q+ t    while((*pdst++ = *src++) != '\0');
! R0 Q0 H& |! k/ ~/ i& d    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)

3 w5 U3 t  f* i$ s0 G
int strcmp(const char* s1,const char* s2){
) m! M( D8 \. X( t/ z; X+ w6 N% g    assert(s1 != NULL && s2 != NULL);
- r, p1 E  U( s5 A    while(s1 && s2 && *s1 == *s2){
; B0 `# G8 r9 [, ?3 i1 g! p        s1++;
9 H  J/ H9 _3 |+ l% v: Q9 w" y* K        s2++;
# R$ B; R& J; I5 b' w$ I- q    }; K0 Y6 P9 h# D' h) }) N
    return *s1 - *s2;
) M' f- L' q# T; n; C  Y% |: j}
) n* G8 ?: ~. {" I: _0 O/ w, _
7、size_t strlen(const char* s)

3 ?0 y: F) C, e7 U4 l& F
size_t strlen(const char* src){
; T% e  V/ m& M5 Z0 ]1 N, }5 a    assert(src != NULL);
# i6 s. V" ?2 O; [; v' d& t8 S    size_t ret = 0;  w  m' k# H; L: K9 v. r7 N
    while(*src++ != '\0'){
' T- x. C9 }# W7 Q& U& ^6 x        ret++;
! @6 i, m0 w% x; c1 ~8 V    }7 w5 g9 B+ y- t6 n5 n2 J+ H6 |* D; R
    return ret;
5 ^3 N  H5 c; N}
% O) v6 T( x7 F8 k
收藏 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 手机版