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 M

    Bin 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 ist

    const 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...


Anmelden zum Antworten