Forum: Mikrocontroller und Digitale Elektronik Erklärung zur Funktion strtok() ?


von Sven (Gast)


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

von Andreas B. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.