C语言-memchr函数字节查找

一、函数介绍

名称

NAME
       memchr, memrchr, rawmemchr - scan memory for a character 
       //查找内存中的字符

头文件

 #include <string.h>

函数原型

void *memchr(const void *s, int c, size_t n);//正向-查找

void *memrchr(const void *s, int c, size_t n);//倒向-查找

void *rawmemchr(const void *s, int c);

返回值

The  memchr()  and memrchr() functions return a pointer to the matching byte or 
NULL if the character does not occur in the given memory area.
The rawmemchr() function returns a pointer to the matching byte, if one is found.  
If no matching byte is found, the result is unspecified.

描述

The  memchr()  function  scans  the  initial n bytes of the memory area
pointed to by s for the first instance of c.  Both c and the  bytes  of
the memory area pointed to by s are interpreted as unsigned char.

The  memrchr()  function  is like the memchr() function, except that it
searches backward from the end of the n bytes pointed to by  s  instead
of forward from the beginning.

The  rawmemchr() function is similar to memchr(): it assumes (i.e., the
programmer knows for certain) that an instance of c lies  somewhere  in
 the  memory  area starting at the location pointed to by s, and so per‐
 forms an optimized search for c (i.e., no use of a  count  argument  to
limit  the range of the search).  If an instance of c is not found, the
 results are unpredictable.  The following  call  is  a  fast  means  of
 locating a string's terminating null byte:

char *p = rawmemchr(s, '');

二、代码设计

代码如下,

#define  _GNU_SOURCE 
//如果没有添加该宏定义,则编译需要参数 -D_GNU_SOURCE
//如:  gcc -D_GNU_SOURCE my_memchr.c -o my_memchr

 #include  <string.h>
 #include <stdio.h>

 int main(int argv,char *argc[])
 {
     char *buf="01233210";
     char findBuf='1';
  
    char *p;
    p=memchr(buf,findBuf,strlen(buf));
    if(p != NULL)
        printf("%s
",p);
    p=memrchr(buf,findBuf,strlen(buf));
    if(p != NULL)
        printf("%s
",p);
     
     return 0;
 }

三、测试验证

编译之后,运行结果如下:
在这里插入图片描述
哈哈