memchr()

memchr ist definiert in der string, die in C über string.h, bzw. in C++ über cstring eingebunden wird.

Funktion

memchr() sucht ein Zeichen (char) in einem Speicherbereich.

Signatur

#include <string.h>
void const * memchr( void const * block, int value, size_t size );
void       * memchr( void       * block, int value, size_t size );

block: Zeiger auf den Speicherblock, der durchsucht werden soll
value: Zeichen, dass gesucht werden soll. Das Zeichen wird als Integer-Datentypen übergeben, tatsächlich werden allerdings nur die unteren 8 Bit gesucht. Es sollte also ein char übergeben werden.
size: gibt an, wie groß der zu durchsuchende Speicherblock ist(Der Typ size_t entspricht i.d.R. Int))

Return value: Zeiger auf das gefundene Element oder NULL

Fehlerquellen

Ist der zu durchsuchende Speicherblock kleiner als durch size angegeben, so findet ein lesender Zugriff auf Speicherbereiche statt, die nicht dem Programm zugeordnet sind. Dies endet daher häufig in einem Programmabsturz.

Beispiel

#include <string.h>      // definiert memchr
 
#include <stdio.h>       // definiert printf
#include <stdlib.h>      // definiert EXIT_SUCCESS
 
char const * included = "Hello proggen.org";
char const * notIncluded = "Salut";
 
int main( void )
{
  /*
  ** In C darf (void *) auf beliebige Zeigertypen gesetzt werden.
  ** Da wir ein (char *) als Block eingeben, werden wir entsprechend ein (char *)
  ** zurückbekommen.
  */
 
  char * pos = memchr( included, 112, strlen( included ) );  // 'p' als Zahl
 
  if( pos ) printf( "%s: 'p' gefunden an Position: %d\n", included, pos - included );
  else      printf( "%s: kein 'p' gefunden\n", included );
 
  pos = memchr( notIncluded, 'p', strlen( notIncluded ) );
 
  if( pos ) printf( "%s: 'p' gefunden an Position: %d\n", notIncluded, pos - notIncluded );
  else      printf( "%s: kein 'p' gefunden\n", notIncluded );
 
  return EXIT_SUCCESS;
}

Ausgabe:

Hello proggen.org: 'p' gefunden an Position: 6
Salut: kein 'p' gefunden

siehe auch