Im eigentlichen Sinn zerlegen würd ich das Ding gar nicht.
Eher angemessen scheint mir so was: Zeiger auf die Anfänge/Längen der einzelnen Teilstrings besorgen. Dadurch vermeidest du das rumkopieren des Strings und dynamisches Allokierung.
Etwa so:
char* getSubstring (char *str, char *length, unsigned char arg_no);
return-Wert ist der Zeiger auf den Anfang des Teilstrings, *length die Länge desselbigen und arg_no die Nummer des Teilstrings (hier mit 1 angefangen zu zählen, evtl ist 0 günstiger).
Beispiel: str="set time 12:00:00"
getSubstring (str, &len, 1) --> len=3, return = str
getSubstring (str, &len, 2) --> len=4, return = str+4
getSubstring (str, &len, 3) --> len=8, return = str+9
getSubstring (str, &len, 4) --> len=-1, return = NULL
Oder was Destriktives, wenn das nicht zu Problemen führt: Das ' ' nach set durch Stringende '\0' ersetzen. Aber erst nachdem du den Anfang des Folgestrings ab time irgendwo gemerkt hast (local static etwa). Womöglich machen die Tokenizer genau sowas.
sscanf() zieht wahrscheinlich einiges aus der libc bzw libgcc hinter sich her. Evtl den ganzen float-Klumbatsch, den du gar nicht brauchst. sprintf() ist auch super übel. Was alles dazugelinkt wird aus irgendwelchen Bibliotheken siehst du am Mapfile, das du beim Linken am besten immer mitgenerieren lässt.
Lesezeichen