Oder, wie erzeugt strtok die Zeichenkette, zu der es Wertpunkte gibt? Ordnet es Speicher dynamisch zu? Ich frage, weil ich nicht sicher bin, ob ich den Token in dem folgenden Code freigeben muss:
Die Variablen STANDARD_INPUT sind für die Exit-Prozedur vorgesehen, wenn der Speicher für die Zuweisung nicht ausreicht und die Zeichenfolge das getestete Subjekt ist.
%Vor%Gemäß den Dokumenten :
Rückgabewert
Ein Zeiger auf das letzte in der Zeichenfolge gefundene Token.
Da der Rückgabezeiger nur auf eines der Bytes in Ihrer Eingabezeichenfolge zeigt, wo das Token startet, hängt es davon ab, ob Sie die Eingabezeichenfolge zugewiesen haben oder nicht.
Der erste Parameter der Funktion strtok (...) ist YOUR :
str C-Zeichenfolge zum Abschneiden. Beachten Sie, dass diese Zeichenfolge von geändert wird in kleinere Strings (Token) aufgeteilt werden. Alternativ eine Null Zeiger kann angegeben werden, in diesem Fall wird die Funktion fortgesetzt Scannen, bei dem ein vorheriger erfolgreicher Aufruf der Funktion beendet wurde.
Er setzt '\ 0' Zeichen in YOUR und gibt sie als abgeschlossene Strings zurück. Ja, es verändert Ihre ursprüngliche Zeichenfolge. Wenn du es später brauchst, kopiere es.
Außerdem sollte keine konstante Zeichenkette sein (zB char* myStr = "constant string";).
Siehe hier .
Es könnte lokal oder durch malloc / calloc zugewiesen werden.
Wenn Sie es lokal auf dem Stack zugewiesen haben (z. B. char myStr[100];
), müssen Sie es nicht freigeben.
Wenn Sie es mit malloc (z. B. char* myStr = malloc(100*sizeof(char));
) zugewiesen haben, müssen Sie es freigeben.
Ein Beispielcode:
%Vor%HINWEIS: Dieses Beispiel zeigt, wie Sie durch den String iterieren ... Da Ihre ursprüngliche Zeichenkette fehlerhaft war, merkt sich strtok (...), wo Sie das letzte Mal waren und arbeitet weiter durch die Zeichenkette.