Parsen von Strings



  • Hallo!

    Ich möchte einen Eingabestring nach einen bestimmten Muster parsen. Habe dazu im Internet die Funktion:

    sscanf()

    gefunden.

    Der String sieht folgendermaßen aus: "Start: 23 43 Stopp: 12 14 OWL: no"

    Soweit ich das verstanden habe, gebe ich an wie das Format sein soll, bei mir kommt jedoch immer "segmentation fault 11" raus:

    char *bla = "Start: 23 43 Stopp: 12 14 OWL: no";
    
        char *hello;
        int aaa;
        int zahl;
        char *stopp;
        int num1, num2;
        char *be;
        char *answ;
        sscanf(bla, "%s %d %d %s %s %d %d %s %s", hello, &aaa, &zahl, stopp, &num1, &num2, be, answ);
    

    Was mache ich denn falsch??

    Und ich hätte noch eine Frage:
    - ist es denn möglich, statt %s - also string zu erwarten genau anzugeben, dass man den string "Stopp:" erwartet, und an dieser stelle dann die Eingabe spaltet.
    - weil ich brauche nur die zahlen, und so muss ich auch "stopp", "start" und die anderen strings speichern.



  • Das sollte:

    sscanf(bla, "%s %d %d %s %d %d %s %s", hello, &aaa, &zahl, stopp, &num1, &num2, be, answ);
    

    heißen, löst aber das problem noch nicht 😞



  • Fang mal damit an, Speicher für Deine Strings zur Verfügung zu stellen:

    char hello[20];
    char stopp[20];
    ...
    


  • Hallo,

    lies mal die Antwort von "Furble Wurble" in Probleme beim Öffnen eines Datenstroms.



  • Hallo

    Vielen Dank für die Hilfe.

    Th69 schrieb:

    Hallo,

    lies mal die Antwort von "Furble Wurble" in Probleme beim Öffnen eines Datenstroms.

    Das hat mir auf jeden Fall weitergeholfen, auch mit dem stern-operator.

    Ich bin sehr neu in C und deswegen habe ich noch Anfangsprobleme.



  • Ich habe jetzt aber auch ein problem mit floats einlesen:
    char *bla = "Start: 23 43 Stopp: 12 14 OWL: no 14.3";

    float overlap;
      int start_one, start_two, end_one, end_two;
     sscanf(bla, "%*s %d %d %*s %d %d %*s %*s %f", &start_one,
                   &start_two, &end_one, &end_two, &overlap);
    

    Bei dem Overlap steht dann einfach nur 0.000000 :S



  • Du hast die Hilfe, die dir gegeben wurde, verändert, offensichtlich ohne zu wissen du tust, und wunderst dich, dass es nicht funktioniert?
    Was bedeudet %* im Formatstring von *scanf?
    Wenn du den Rückgabewert von sscanf auswerten würdest, wäre dir sicher was aufgefallen.



  • Sorry, aber ich sehe da jetzt kein Problem: http://ideone.com/MiU8rq


Anmelden zum Antworten