Ich habe jetzt folgendes ausprobiert:
Das ursprüngliche Char-Array mit strtok() bearbeitet.
Die zurückgegebenen Pointer gespeichert.
Das ursprüngliche Char-Array mit einem andern String überschrieben und die gespeicherten Pointer von strtok() zur Ausgabe verwendet.
Jetzt stellt sich das so dar:
Es wird kein zusätzlicher Speicher durch strtok() reserviert, um die Teilzeichenketten woanders zu speichern.
strtok() fügt an den Trennzeichen der Tokens offenbar ein Endezeichen (0) ein, also werden dann die Trennzeichen überschrieben mit 0. Der ursprüngliche Inhalt des Char-Array wird also überschrieben.
Wenn nun mittels Serial.println(xxx[index]); die Teilzeichenketten ausgegeben werden, funktioniert das mit dem ursprüngliche Char-Array, bearbeitet von strtok(), wie erwartet.
Wenn das Char-Array überschrieben wurde, werden trotzdem (aufgrund der Pointer in das Array) Teilzeichenketten ausgegeben und zwar jeweils von der Position, die durch den Pointer im Array bestimmt ist, bis zum Ende des Char-Arrays (bzw. bis ein Endezeichen - vermutlich 0 - auftritt).
Die Pointer von strtok() zeigen in das Char-Array, das von strtok() bearbeitet wurde.
Ist daher mit den Zeigern eine sparsame Methode und durchaus nicht unpraktisch, solange das Char-Array nicht erneut überschrieben wird, bevor die Tokens alle verarbeitet sind. Was ansich auch eine Falle beim Programmieren sein und zu unerwarteten Ergebnissen führen kann.
Lesezeichen