名稱空間
變體
操作

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