Erklärung zur Funktion strtok() ?

Gast #2122423
Lesenswert?
• ▲
▼
Hallo,

so schaut ein Programmierbeispiel zu strtok() aus einem C-Forum 
(http://www.cppreference.com/wiki/string/c/strtok) aus:
1
har str[] = "now # is the time for all # good men to come to the # aid of their country";
2
     char delims[] = "#";
3
     char *result = NULL;
4
     result = strtok( str, delims );
5
     while( result != NULL ) {
6
         printf( "result is \"%s\"\n", result );
7
         result = strtok( NULL, delims );
8
     }

Also dass ich nen String  hab und denn nach Trennzeichen durhsuchen 
möchte hab ich kapiert. Aber was bedeutet die Zuweisung:
1
char *result = NULL;
Der Wert des Pointers result wird auf 0 gesetzt?

Anschließend wird dann das Ergebnis der Funktion strtok() an die Adresse 
des Pointer geschrieben.
1
result = strtok( str, delims );
D.h. der Pointer zeigt nun auf das erste Trennzeichen in meinem 
String???

Okay soweit so gut! Nun wird so lange der Inhalt einer while-Schleife 
ausgeführt, solange die Adresse des Zeigers nicht wieder zu Null wird?
1
 while( result != NULL ) {
2
         printf( "result is \"%s\"\n", result );
3
         result = strtok( NULL, delims );
4
     }
Okay von mir aus das versteh ich noch,  wenn es denn so ist. Aber was 
macht die letzte Zeile in dieser while-Schleife???

Was hat es mit dem
1
NULL
 auf sich?

Grüße Sven
Gast #2122438
Lesenswert?
• ▲
▼
NULL gehört zu den Grundlagen in C.

Tatsächlich ist die Initialisierung von result unnötig, die Variable 
wird ja gleich in der nächsten Zeile überschrieben.

Das Geheimnis hinter strtok() ist, dass es den gerade bearbeiteten 
String speichert. Das heißt, mit einem Aufruf mit einem String als 
erstes Argument wird die Verarbeitung eines neuen Strings begonnen. Wird 
ein Nullzeiger übergeben, wird der (intern gespeicherte) String weiter 
verarbeitet.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.