Daten aus einem string mit sscanf lesen



  • Hallo,
    Ich lese aus einer Datei mehrere Datensätze aus und speichere diese in einem String. Aus diesem will ich nun verschiedene Werte auslesen. Der String ist so aufgebaut:

    "< x = 128 y = 480 img = img/A.png type = passable >"

    Ich verwende sscanf_s um die Daten auszulesen:

    char img[64];
    char ObjecType[64];
    sscanf_s(lines[i].c_str(),
    "< x = %i y = %i img = %s type = %s>",&x,&y,img,ObjectType);
    

    Allerdings unterbricht das Programm, wenn ich die Funktion ausführe. VS sagt der Fehler würde an dieser Stelle auftreten aber ich weiß nicht was ich falsch mache. Ich habe mich schon eine Menge im Internet umgeguckt aber nirgendwo wird genau erklärt wie ich das Problem Lösen kann.
    Kann mir hier jemand helfen?

    mfg,
    Daniel



  • sscanf ist nicht für C++ strings geeignet.
    Verwende istringstream, den kannste so wie cin verwenden.

    Edit: Am stri.g liegts nicht, aber Tipp stimmt trotzdem.



  • Könntest du mir vielleicht einen Lösungsvorschlag zeigen?



  • Ich weiß nicht ob es nötig ist, aber ein Leerzeichen vor dem > schadet nicht.
    X und Y sin auch int?

    Bei %i sei noch angemerkt, das bei führenden Nullen die Zahl als Oktaldarstellung interpretiert wird.



  • Du verwendest sscanf_s falsch. %s will char * und zudem die Buffergröße als unsigned .



  • Habe es meiner Meinung nach relativ unsauber geläst, aber hey! Es funktioniert ! 🙂

    istringstream iss(lines[i]);
    iss >> temp >> temp >> temp >> stringX >> temp >> temp >> stringY >> temp >> temp >> img >> temp >> temp >> ObjectType;
    


  • Nathan schrieb:

    sscanf ist nicht für C++ strings geeignet.
    Verwende istringstream, den kannste so wie cin verwenden.

    Edit: Am stri.g liegts nicht, aber Tipp stimmt trotzdem.

    Was? Natürlich ist es das.



  • Ethon schrieb:

    Nathan schrieb:

    sscanf ist nicht für C++ strings geeignet.
    Verwende istringstream, den kannste so wie cin verwenden.

    Edit: Am stri.g liegts nicht, aber Tipp stimmt trotzdem.

    Was? Natürlich ist es das.

    Hab mir den Code nicht genau angesehen, ging einfach davon aus, dass er versuchte via sscanf in einen std::string einzulesen, was ja nicht geht.
    Habs im Edit ja auch korrigiert.


Log in to reply