Namespaces
Variants

memchr

From cppreference.net
< 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 ,但在数组范围内找到匹配项,则行为是明确定义的。

(since 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 ("character '%c'(%i) found: %s\n", c, c, ps)
           : printf ("character '%c'(%i) not found\n", c, c);
    }
    return 0;
}

可能的输出:

character 'D'(68) found: DEFG
character 'd'(100) not found

参考文献

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

参见

查找字符的首次出现
(函数)
C++ 文档 关于 memchr