Namensräume
Varianten
Aktionen

memchr

Von cppreference.com
< c‎ | string‎ | byte
Definiert in Header <string.h>
void* memchr( const void* ptr, int ch, size_t count );
(1)
/*QVoid*/ *memchr( /*QVoid*/ *ptr, int ch, size_t count );
(2) (seit C23)
1) Findet das erste Vorkommen von (unsigned char)ch in den ersten count Bytes (jedes als unsigned char interpretiert) des Objekts, auf das ptr zeigt.
2) Typ-generische Funktion, äquivalent zu (1). Sei T ein unqualified Objekttyp (einschließlich void).
  • Wenn ptr vom Typ const T* ist, ist der Rückgabetyp const void*.
  • Andernfalls, wenn ptr vom Typ T* ist, ist der Rückgabetyp void*.
  • Andernfalls ist das Verhalten undefiniert.
Wenn eine Makrodefinition jeder dieser generischen Funktionen unterdrückt wird, um auf eine tatsächliche Funktion zuzugreifen (z.B. wenn (memchr) oder ein Funktionszeiger verwendet wird), wird die tatsächliche Funktionsdeklaration (1) sichtbar.

Das Verhalten ist undefiniert, wenn der Zugriff über das Ende des durchsuchten Arrays hinaus erfolgt. Das Verhalten ist undefiniert, wenn ptr ein Nullzeiger ist.

Diese Funktion verhält sich so, als würde sie die Bytes sequenziell lesen und stoppen, sobald ein übereinstimmendes Byte gefunden wird: Wenn das von ptr referenzierte Array kleiner als count ist, aber die Übereinstimmung innerhalb des Arrays gefunden wird, ist das Verhalten gut definiert.

(seit C11)

Inhalt

[bearbeiten] Parameter

ptr - Zeiger auf das zu untersuchende Objekt
ch - Zu suchendes Byte
zählt - Maximale Anzahl zu untersuchender Bytes

[bearbeiten] Rückgabewert

Zeiger auf die Position des Bytes oder ein Nullzeiger, wenn kein solches Byte gefunden wurde.

[bearbeiten] Beispiel

#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;
}

Mögliche Ausgabe

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

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.24.5.1 Die Funktion memchr (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.24.5.1 Die Funktion memchr (p: 267-268)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.24.5.1 Die Funktion memchr (p: 367)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.21.5.1 Die Funktion memchr (p: 330)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.11.5.1 Die Funktion memchr

[bearbeiten] Siehe auch

findet das erste Vorkommen eines Zeichens
(Funktion) [bearbeiten]
C++ Dokumentation für memchr