深度剖析 string —— strcpy & strncpy

系列文章目录

深度剖析:strcat & strncat
深度剖析:strchr & strstr
深度剖析:strcmp & strncmp
深度剖析:strcpy & strncpy
深度剖析:strlen & strtok
深度剖析:memcpy & memmove
深度剖析:memset & memcmp



前言

库函数string是我们经常使用也是非常重要的代码,我将会对常用的函数的用法和实现原理进行深度剖析


一、strcpy

1.调用结构

char *strcpy(char *dest, const char *src);

2.使用详解

strcpy:把 src 所指向的字符串复制到 dest

原理详解:

  1. 源字符串必须以’\0’结束
  2. 会将源字符串中的’\0’拷贝到目标空间
  3. 目标空间必须足够大,以确保能存放源字符串(不够大也依然能全部拷贝,但会报错)
  4. 目标空间必须可变(不能是常量字符串)

3.源码剖析

char *Strcpy(char *dest, const char *src) {
//把 src 所指向的字符串复制到 dest
    assert(dest && src);                   //防止传入空指针
    char *start = dest;                    //记录起始位置
    while ((*dest++ = *src++) != '\0');    //拷贝字符串
    return start;                          //返回起始位置
}

二、strncpy

1.调用结构

char *strncpy (char *dest, const char *src, size_t n);

2.使用详解

strncpy:把 src 所指向的字符串复制到 dest,最多复制 n 个字符

原理详解:

  1. 拷贝num个字符从源字符串到目标空间
  2. 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个

3.源码剖析

char *Strncpy(char *dest, const char *src, int len) {
//把 src 所指向的字符串复制到 dest,最多复制 n 个字符
    char *start = dest;
    while (len-- && (*dest++ = *src++) != 0); // len先交付结果再--
    if (len) {                                // 保护代码,后面全部补0
        while (--len) {                       // len的位置有'\0'
            *dest++ = '\0';
        }
    }
    return start;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十里坡小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值