Umstieg von char* auf string



  • du könntest einfach bevor der string anfängt einen int speichern, der die länge des nachfolgenden strings angibt 😃
    übrigens müsste es file->write(string.c_str(), string.length()) ohne das +1 heissen



  • also dieses read geht vermutlich nur mit char*, weil nach c_str() darfst du nicht schreiben.
    aber normalerweise nimmt man dafuer ifstream und ofstream, dann z.b. so:

    string s;
    if(ifstream f("test.txt")){
        getline(f,s);
    }
    if(ofstream f("testout.txt")){
        f<<s<<endl;
    }
    


  • Nur was mach ich denn, wenn ich in meiner Datei Float-, Int-, BYTE- und viele weitere Werte sequentiell nacheinander abspeichere und es sich um keine TXT-Datei handelt. Dann nützt mir getline doch nichts, oder?!



  • Original erstellt von TS++:
    Ich hätte lieber std::string anstelle von string schreiben sollen!
    Komisch: der DevC++-Compiler hat auch string geschluckt!

    Dev-C++ ist kein Compiler sondern eine IDE und verwendet standardmäßig meines Wissens den g++ als Compiler und wenn der sich über ein fehlendes std:: nicht beschwert hast Du eine veraltete gcc-Version - wahrscheinlich 2.95.x statt 3.2.x.



  • wenn man oft einen char* braucht, dann sollte man sich überlegen ob man nicht vielleicht besser einen vector<char> statt einem string nimmt...

    denn dann hat man mit
    vec.begin()
    bereits einen c-str (sofern man als letztes zeichen ein \0 hat)



  • Original erstellt von Shade Of Mine:
    denn dann hat man mit
    vec.begin()
    bereits einen c-str (sofern man als letztes zeichen ein \0 hat)

    Kann man denn dann davon ausgehen, dass die alle sauber hintereinander im Speicher liegen???

    😕



  • Hi,

    Ja, davon kann man ausgehen, da der Vektor aus einem Feld besteht, daß hintereinander im speicher liegt.

    grüße Con@n



  • Ja, aber der Speicher ist dynamisch. Wenn neuer angefordert wird muss dieser doch nicht zusammenhängend sein, oder?



  • Original erstellt von MaSTaH:
    Ja, aber der Speicher ist dynamisch. Wenn neuer angefordert wird muss dieser doch nicht zusammenhängend sein, oder?

    jein.
    laut standard muss ein vector nicht inern als array aufgebaut sein, aber ein defekt report verlangt dies!

    und alle implementationen die ich kenne halten sich daran (es ist anders auch nicht vernünftig möglich einen vector nach STL vorgaben zu realisieren)



  • thx 😉


Anmelden zum Antworten