命名空间
变体
操作

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 ("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 函数 (p: 267-268)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.24.5.1 memchr 函数 (p: 367)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.21.5.1 memchr 函数 (p: 330)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.11.5.1 memchr 函数

[编辑] 另请参阅

查找字符的第一次出现
(函数) [编辑]
C++ 文档 用于 memchr