系列文章目录
深度剖析:strcat & strncat
深度剖析:strchr & strstr
深度剖析:strcmp & strncmp
深度剖析:strcpy & strncpy
深度剖析:strlen & strtok
深度剖析:memcpy & memmove
深度剖析:memset & memcmp
文章目录
- 系列文章目录
- 前言
- 一、memset
- 1.调用结构
- 2.使用详解
- 3.源码剖析
- 二、memcmp
- 1.调用结构
- 2.使用详解
- 3.源码剖析
前言
库函数string是我们经常使用也是非常重要的代码,我将会对常用的函数的用法和实现原理进行深度剖析
一、memset
1.调用结构
void*memset(void*str,intnum,size_tlen);2.使用详解
memset:对每个字节进行初始化
原理详解:
- 以字节为单位设置内存
- 每个字节设置为一个值
- 设置len个字节
3.源码剖析
void*Memset(void*str,intnum,size_tlen){//(变量, 值, 字节)//以字节为单位设置内存, 每个字节设置为一个值,设置n个字节assert(str);//防止传入空指针char*start=str;//记录起始位置的地址while(len--){//对每个字节进行初始化*(char*)str=num;str=(char*)str+1;}returnstart;//返回起始位置的地址}二、memcmp
1.调用结构
intmemcmp(voidconst*s1,voidconst*s2,intlen);2.使用详解
memcmp:比较从 s1 和 s2 指针开始的 num 个字节
原理详解:
- 内存比较一个字节一个字节比较
- 判断每个字节在内存中存储的值是否相等
- 第一个字符串 > 第二个字符串,则返回 大于0 的数字
- 第一个字符串 = 第二个字符串,则返回 0
- 第一个字符串 < 第二个字符串,则返回 小于0 的数字
3.源码剖析
intMemcmp(voidconst*s1,voidconst*s2,intcount){//比较从 s1 和 s2 指针开始的 num 个字节assert(s1&&s2);//防止传入空指针while(count--&&*(char*)s1==*(char*)s2&&*(char*)s1!='\0'&&*(char*)s2!='\0'){//判断每个字节存入内存中的值是否相等s1=(char*)s1+1;s2=(char*)s2+1;}return*(char*)s1-*(char*)s2;}