Eine Zeichenfolge in C nach Leerzeichen aufteilen

7

Ich arbeite mit C und durch einen Socket werde ich eine Nachricht mit einem Leerzeichen empfangen, ich muss die Zeichenfolge in Teile im Leerzeichen aufteilen. Wie würde ich das machen?

    
The.Anti.9 27.11.2008, 09:10
quelle

3 Antworten

14

strtok_r ist dein Freund.

Benutze nicht plain strtok() , da es NICHT Thread-sicher ist.

Selbst auf Plattformen, auf denen es Thread-sicher ist (da der Status in Thread-Local Storage gehalten wird), gibt es immer noch das Problem, dass die Verwendung des internen Status bedeutet, dass Token nicht gleichzeitig von mehreren Strings analysiert werden können.

Wenn Sie beispielsweise eine Funktion schreiben, die strtok() verwendet, um String A zu trennen, kann Ihre Funktion nicht innerhalb der Schleife einer zweiten Funktion aufgerufen werden, die strtok() verwendet, um String B zu teilen.

    
Roddy 27.11.2008, 09:13
quelle
5

Wenn Sie den Zeichenfolgenpuffer besitzen und wissen, dass er sicher geändert werden kann, können Sie strtok_r() verwenden, wie von den Leuten vorgeschlagen. Oder Sie könnten es selbst tun, so:

%Vor%

Dies könnte je nach Kontext schneller und / oder einfacher zu verstehen sein.

    
unwind 27.11.2008 09:22
quelle
0

Dies geschieht normalerweise mithilfe des strtok () -Bibliotheksaufrufs. Beachten Sie jedoch, dass diese Funktion die Eingabezeichenfolge ändert (sie fügt an allen Stellen, an denen das ausgewählte Trennzeichen gefunden wurde, '\ 0' NUL-Zeichen ein). Daher sollten Sie bei Bedarf strtok () auf einer Kopie der Zeichenfolge aufrufen Zugriff auf die ganze Sache später.

BEARBEITEN: Wie von einem anderen Poster erwähnt, ist "plain" strtok () nicht Thread-sicher, daher ist strtok_r () die sicherere Funktion, die aufgerufen wird. Ich bin nicht sicher, ob strtok_r () das gleiche Problem hat, den Eingabepuffer an Ort und Stelle zu ändern.

    
Matt Campbell 27.11.2008 09:14
quelle

Tags und Links