Christoph: C-String teilen

Beitrag lesen

Moin.

Falls es wirklich nur ein einzelnes Trennzeichen ist,
kannst Du es Dir und der CPU auch leicht machen:

  1. Den gesamten String kopieren (nur, falls Du den
       Empfangspuffer noch anderweitig brauchst, ansonsten
       kann die Manipulation direkt im Empfangspuffer geschehen...)
  2. Alle '#' in der Kopie durch (char)0 ersetzen.

Ich möchte dich jetzt nicht enttäuschen, aber das ist genau das, was Steffanies Lösung bereits tut (strtok ersetzt die Trennzeichen im String, daher legt Steffanie korrekterweise vorher eine Kopie von empfangspuffer in empfangsdaten ab).

  1. Ein Pointer-Array vom typ char** anlegen, welches
       auf die jeweiligen Teilstring-Fragmente zeigt.

Das macht Steffanie allerdings nicht, sondern sie kopiert (vermutlich unnötigerweise - aber wer kann wissen, wie das ganze weiter verarbeitet werden soll?) den String erneut in ein weiteres Array.

Meine Lösung arbeitet im übrigen genauso wie deine, nur, dass ich auf Rückgabewerte der malloc's (bei dir strdup) prüfe und im Gegensatz zu dir den String nur einmalig durchlaufe: Du tust dies einmal zum Ersetzen der Trennzeichen, und ein weiteres mal, um die Pointer in result abzulegen. Das ist nicht wirklich effizient...

Christoph