====== strtok() ====== strtok ist definiert in der ''[[start|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 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 // definiert strtok #include // definiert printf #include // 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 ===== [[c:lib:string:start|string]]: [[c:lib:string:strcspn|strcspn()]]