系列文章目录
深度剖析:strcat & strncat
深度剖析:strchr & strstr
深度剖析:strcmp & strncmp
深度剖析:strcpy & strncpy
深度剖析:strlen & strtok
深度剖析:memcpy & memmove
深度剖析:memset & memcmp
文章目录
- 系列文章目录
- 前言
- 一、strcat
- 1.调用结构
- 2.使用详解
- 3.源码剖析
- 二、strncat
- 1.调用结构
- 2.使用详解
- 3.源码剖析
前言
库函数string是我们经常使用也是非常重要的代码,我将会对常用的函数的用法和实现原理进行深度剖析
一、strcat
1.调用结构
char*strcat(char*dest,constchar*src);2.使用详解
strcat:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾
原理详解:
- 两个字符串必须以
'\0'结束- 目标空间必须有足够的大,能容纳下源字符串的内容
- 目标空间必须可修改
- 不可追加自己
- 可通过修改传入src的地址改变追加的起始位置
3.源码剖析
char*Strcat(char*dest,constchar*src){//把 src 所指向的字符串追加到 dest 所指向的字符串的结尾 (不可追加自己)assert(dest&&src);//断言,防止传入空指针char*start=dest;//记录字符串dest的起始位置用于返回起始地址while(*dest){//找到字符串dest的'\0'dest++;}while(*src!='\0'){//将字符串src追加到字符串dest的结尾*dest++=*src++;}*dest='\0';//在结尾追加上'\0'returnstart;}二、strncat
1.调用结构
char*strncat(char*dest,constchar*src,size_tn);2.使用详解
strncat:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止
原理详解:
- 两个字符串必须以
'\0'结束- 目标空间必须有足够的大,能容纳下源字符串的内容
- 目标空间必须可修改
- 不可追加自己
- 可通过修改传入src的地址改变追加的起始位置
3.源码剖析
char*Strncat(char*dest,constchar*src,intlen){//把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止 (不可追加自己)assert(dest&&src);//断言,防止传入空指针char*start=dest;//记录字符串dest的起始位置用于返回起始地址while(*dest){//找到字符串dest的'\0'dest++;}while(len--){//将字符串src追加到字符串dest的结尾if(*src=='\0'){//如果src结尾的'\0'也完成追加,则直接返回returnstart;}*dest++=*src++;}*dest='\0';//如果追加完成len个字节,则在最后追加上'\0'returnstart;}