strtok()

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

Funktion

strtok() wird ein veränderbarer String übergeben und eine Zeichenkette von Trennzeichen (Delimiters). Die Aufgabe von strtok ist nun, alle Trennzeichen durch Null-Bytes zu ersetzen, so dass sie eigenständiger als String verwendbar sind, da jeder Teilstring am Ende ein Nullbyte trägt. Beim ersten Aufruf von strtok() wird der Funktion der zu zerlegende String übergeben. strtok() merkt sich intern die Adresse des Strings und die Position des zuletzt gefundenen Trennzeichen. Bei jedem folgenden Aufruf wird nun als String NULL übergeben, sowie die nun Trennzeichen. Die Trennzeichen können sich dabei von den zuvor verwendeten Trennzeichen unterscheiden.

Signatur

#include <string.h>
char * strtok( char * string, char const * delimiters );

string: Zeiger auf den String, der in unterteilt werden soll.
delimiters: Zeichen, an denen der übergebene String unterteilt werden soll

Return value: Zeiger auf das zuletzt im String gefundene Token oder NULL, falls keine weiteren Tokens gefunden werden konnten.

Fehlerquellen

Der übergebene String wird in Unterstrings zerteilt, indem die Trennzeichen mit Nullbytes überschrieben werden. Der benutzte Speicherblock bleibt jedoch in einem Stück, er enthält entsprechend mehrere Teilstrings in einem Speicherblock. Muss der Speicherblock wieder freigegeben werden, so muss die Anfangsadresse des Strings, der in strtok() übergeben wird, sich gemerkt werden und diese Adresse als einzige wieder freigegeben werden. Die Unterstrings, die strtok() zurückliefert dürfen nicht freigegeben werden!

Beispiel

#include <string.h>      // definiert strtok
 
#include <stdio.h>       // definiert printf
#include <stdlib.h>      // definiert EXIT_SUCCESS
 
int main( void )
{
  char string[]     = "http://www.proggen.org/drawer/page.html";
  char delimiter1[] = ":";
  char delimiter2[] = "./";
  char * token;
 
  printf ("Zerlege URL: %s\n", string );
  token = strtok( string, delimiter1 );
  while( token )
  {
    printf("Token: %s\n", token);
    token = strtok( NULL, delimiter2 );
  }
 
  printf( "Ausgabe zerlegter String: %s\n", string );
 
  return EXIT_SUCCESS;
}

Ausgabe:

Zerlege URL: http://www.proggen.org/drawer/page.html
Token: http
Token: www
Token: proggen
Token: org
Token: drawer
Token: page
Token: html
Ausgabe zerlegter String: http

siehe auch