C标准库string.c学习笔记(一)--memchr()

一、memchr()函数声明

void *  memchr (const void * buf,int chr,size_t cnt )
// 函数功能:在“buf”地址的前“cnt”个字节中寻找"chr"字节
//          成功返回 “chr”所在位置的指针 
//          失败返回  null  

二、memchr()函数原型

void *  memchr (const void * buf,int chr,size_t cnt )
{
    //当(buf!= chr) && cnt 条件满足执行循环
    while ( cnt && (*(unsigned char *)buf != (unsigned char)chr) ) 
    {
        buf = (unsigned char *)buf + 1;//指针自增赋值,类似数组的自增遍历
        cnt--; //cnt个字节自减 
    }
    return(cnt ? (void *)buf : NULL);//当cnt为真则找到chr并返回buf指针,否则返回NULL
}

三、应用实例

①size_t cnt等于str[]长度

int main (void)
{
   const char str[] = "abcdefghijk";//初始化数组
   const char chr   = 'j';//定义chr的内容
   char *ret;//返回值存储地址
   ret = (char*)memchr(str, chr, sizeof(str));  
   printf("ch = %s.\r\n",ret);  //打印ret接收的返回值
   return 0;
}

结果:

②size_t cnt小于str[]长度

int main (void)
{
   const char str[] = "abcdefghijk";//初始化数组
   const char chr   = 'c';//定义chr的内容
   char *ret;//返回值存储地址
   ret = (char*)memchr(str, chr, 5);  
   printf("chr = %s.\r\n",ret);  //打印ret接收的返回值
   return 0;
}

结果:

③chr在size_t cnt之后

int main (void)
{
   const char str[] = "abcdefghijk";//初始化数组
   const char chr   = 'g';//定义chr的内容
   char *ret;//返回值存储地址
   ret = (char*)memchr(str, chr, 5);  
   printf("chr = %s.\r\n",ret);  //打印ret接收的返回值
   return 0;
}

结果:

四、总结分析

根据实例①②③得出结论

当size_t cnt等于内存地址长度,匹配到chr之后就返回内存地址所存数据中chr并包含chr的全部字节

当size_t cnt小于内存地址长度,匹配到chr之后就返回内存地址所存数据中chr并包含chr的全部字节

当size_t cnt内没有匹配到chr,就会返回NULL

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值