ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

深度剖析 string —— memset memcmp

2026/8/13 16:50:42 拓冰建站 浏览量
深度剖析 string —— memset  memcmp

系列文章目录

深度剖析: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:对每个字节进行初始化

原理详解:

  1. 以字节为单位设置内存
  2. 每个字节设置为一个值
  3. 设置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 个字节

原理详解:

  1. 内存比较一个字节一个字节比较
  2. 判断每个字节在内存中存储的值是否相等
  3. 第一个字符串 > 第二个字符串,则返回 大于0 的数字
  4. 第一个字符串 = 第二个字符串,则返回 0
  5. 第一个字符串 < 第二个字符串,则返回 小于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;}