====== memchr() ====== memchr ist definiert in der ''[[start|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 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 [[c:type:Integer]] übergeben, tatsächlich werden allerdings nur die unteren 8 Bit gesucht. Es sollte also ein [[type:char]] übergeben werden. \\ **size**: gibt an, wie groß der zu durchsuchende Speicherblock ist(Der Typ ''size_t'' entspricht i.d.R. [[c:type:int]])) **Return value**: Zeiger auf das gefundene Element oder [[glossary: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 // definiert memchr #include // definiert printf #include // 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 ===== [[c:lib:string:start|string]]: [[c:lib:string:strchr|strchr()]], [[c:lib:string:strrchr|strrchr()]]