memchr

来自cppreference.com
< c‎ | string‎ | byte
在标头 <string.h> 定义
void* memchr( const void* ptr, int ch, size_t count );
(1)
/*QVoid*/ *memchr( /*QVoid*/ *ptr, int ch, size_t count );
(2) (C23 起)
1)ptr 所指向对象的起始 count 个字节(均转译成 unsigned char)中寻找首次出现的 (unsigned char)ch
2) 等价于 (1) 的泛型函数。令 T 为未限定的 对象类型(包括 void)。
  • ptr 类型为 const T*,则返回类型为 const void*
  • 否则,若 ptr 类型为 T*,返回类型为 void*
  • 否则,行为未定义。
如果这些泛型函数中的某个宏定义被抑制无法访问实际函数(比如当使用了 (memchr) 或使用了函数指针时),则实际函数声明 (1) 即变得可见。

若在所搜索的数组结尾后发生访问,则行为未定义。若 ptr 为空指针则行为未定义。

此函数表现如同它按顺序读取字节,并于找到匹配的字节时立即停止:若 ptr 所指向的字节数组小于 count,但在数组中找到匹配,则行为良定义。

(C11 起)

参数

ptr - 指向要检验的对象的指针
ch - 要搜索的字节
count - 要检验的最大字节数

返回值

指向字节位置的指针,或若找不到该字节则为空指针。

示例

#include <stdio.h>
#include <string.h>
 
int main(void)
{
    const char str[] = "ABCDEFG";
    const int chars[] = {'D', 'd'};
    for (size_t i = 0; i < sizeof chars / (sizeof chars[0]); ++i)
    {
        const int c = chars[i];
        const char *ps = memchr(str, c, strlen(str));
        ps ? printf ("找到字符 '%c'(%i): %s\n", c, c, ps)
           : printf ("未找到字符 '%c'(%i)\n", c, c);
    }
    return 0;
}

可能的输出:

找到字符 'D'(68): DEFG
未找到字符 'd'(100)

引用

  • C23 标准(ISO/IEC 9899:2024):
  • 7.24.5.1 The memchr function (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 7.24.5.1 The memchr function (第 267-268 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.24.5.1 The memchr function (第 367 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.21.5.1 The memchr function (第 330 页)
  • C89/C90 标准(ISO/IEC 9899:1990):
  • 4.11.5.1 The memchr function

参阅

查找字符的首次出现
(函数)