Muss ich die strtok resultierende Zeichenfolge freigeben?

8

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%     
Sunspawn 03.01.2014, 12:56
quelle

3 Antworten

8

strtok bearbeitet die übergebene Zeichenfolge und gibt einen Zeiger darauf zurück. Es wird also kein Speicher zugewiesen.

Bitte denken Sie daran, strspep oder mindestens strtok_r zu verwenden, um später einige Kopfschmerzen zu vermeiden.

    
Andreas 03.01.2014, 13:03
quelle
5

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.

    
qwwqwwq 03.01.2014 13:02
quelle
2

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.

    
FuzzyBunnySlippers 03.01.2014 13:03
quelle

Tags und Links