strtok - Problem!
-
Hallo Leute!
im char array steht: Voltage=17.5M
und wenn ich es mit strtok zerlege
dann klappt es mit den ersten beiden
Teilstrings 'Voltage' und '17.5'
hervorragend. Ich Speichere sie
zur Weiterverarbeitung in Variablen
usw... aber das auslesen von 'M'
klappt überhaupt nicht
Vielleicht weiss jemand was ich falsch mache?
Hier ist mein Code:char *wert; char *groesse; char *dimens; double zahl; char array[] = "Voltage = 17.5M"; groesse = strtok(array, " ="); wert = strtok(NULL, " =nµmkKM"); dimens = strtok(NULL, " =nµmkKM"); zahl = atof(wert); printf("Groesse: %s\n", groesse); printf("Zahl: %.2lf \n", zahl); printf("Dimension: %s\n\n", dimens);
Mir wäre auch wichtig dass es mit dem
auslesen selbst dann klappt, wenn zwischen
den Trennzeichen ev. noch ein blanc steht...
Voltage=17.5M oder Voltage = 17.5 MBin für jede Hilfe dankbar
-
Bin nicht sicher, aber es kann sein, dass es Ärger gibt, weil strtok den Quellstring verändert. String-Literale sollen aber eigentlich nicht modifiziert werden.
Außerdem übergibst du dann 2 mal als Quell-String NULL .
-
Vielleicht solltest du es manuell machen.
Mit strpbrk das erste ' ' oder '=' suchen, dann mit strcpy von Anfang bis zur (auschliesslich) Position den String kopieren.Dann wieder die Position der erste Ziffer finden und die Pos. der letzen Ziffer. Diesen Substring dann wieder herauskopieren und wie gehabt unwandeln.
-
SeppSchrot schrieb:
String-Literale sollen aber eigentlich nicht modifiziert werden.
Was heisst eigentlich? String Literale dürfen nicht verändert werden. Alles andere ergibt UB.
Warum solche Sachen immer wieder passieren? Weil viele leute String Literale falsch definieren. Richtig istconst char array[] = "Voltage = 17.5M";
-
wenn ich es mit strtok zerlege dann klappt es mit den ersten beiden Teilstrings 'Voltage' und '17.5' hervorragend. Ich Speichere sie zur Weiterverarbeitung in Variablen usw... aber das auslesen von 'M' klappt überhaupt nicht
ist doch auch logisch: der strtok "zerhackt" doch den ursprünglichen String und entfernt dabei die Trennzeichen. Und wenn du am Ende nach M,q oder was auch immer suchst, wirst du nie einen string erhalten, in dem diese Zeichen vorkommen...