String mit fstream in C++ Builder 2009 ausgeben



  • Hallo zusammen,

    wie kann man denn mit dem C++ Builder 2009 in fstream Strings ausgeben? Mit

    f >> (IntToStr((int) barns[i]->color)).c_str();
    

    (wie im BDS 2006 benutzt) bekomme ich die Fehlermeldung

    E2094 'operator>>' ist im Typ 'ifstream' für Argumente des Typs 'wchar_t *' nicht implementiert.

    Gruss
    Lodo2609



  • Versuche es hier doch einfach mal mit wfstream statt fstream.



  • lodo2609 schrieb:

    f >> (IntToStr((int) barns[i]->color)).c_str();
    

    (wie im BDS 2006 benutzt)

    Mir graust.

    • C-Casts sind böse. Benutze entweder einen Konstruktor-Cast oder static_cast:
    int (barns[i]->color);
    static_cast <int> (barns[i]->color);
    
    • Der Operator >> schreibt nicht in den Stream, sondern liest daraus.
    • Wenn der rechte Operand des operator >> ein char*-Zeiger ist, wird der nächste nullterminierte String aus dem Stream eingelesen und im Puffer, auf den der char*-Zeiger zeigt, gespeichert. Das kann jederzeit zu einem Buffer Overflow führen.
    • Du schreibst in den Datenbereich des von IntToStr() zurückgegebenen temporären String-Objektes, der nur ein paar Bytes groß ist. Einerseits kannst du damit infolge des erwähnten Buffer Overflow eine Zugriffsverletzung verursachen, andererseits wird selbst im unwahrscheinlichen Erfolgsfalle der String am Ende der Zeile destruiert; du hast also ohnehin nichts davon.


  • Danke, das funktioniert.

    Gruss Lodo2609


Anmelden zum Antworten