Struct in Datei schreiben aus CodeGuru.com
-
beg_off schrieb:
ignore() ignoriert einfach das nächste Zeichen oder ?
<a href= schrieb:
C++ Reference - istream::ignore">
istream& ignore (streamsize n = 1, int delim = EOF);
Ergo ja.
-
sollte man jetzt eher die Cast Variante :
datei.write(reinterpret_cast<char*>(&myString), myString.length() );
oder die C-String Varainte benutzen?? :
datei.write(myString.c_str(), myString.length() );
Generell hab ich gelesen ist ein reinterpret_cast meist mit Vorsicht zu genießen??
-
Die erste Variante wird explodieren. Die zweite ist unschön, da sie zeigt, dass du das passendere string::data nicht kennst, bzw. nicht den feinen logischen Unterschied zwischen einem C-String und einer Zeichenkette.
-
Die erste Variante wird explodieren
Warum?
dass du das passendere string::data nicht kennst, bzw. nicht den feinen logischen Unterschied zwischen einem C-String und einer Zeichenkette.
Du meinst das "Abschlusszeichen" ?
Ich habe jetzt für "Schreiben und Lesen" mal alle Varianten ausprobiert. (Hier nur die Binary Variante)
Z.B.:
void write_binary(std::string &input, std::fstream &file){ input += '\0'; size_t len = input.length(); file.write(reinterpret_cast<char*>(&len), sizeof(len) ); //file.write(reinterpret_cast<char*>(&input[0]), len /*input.size()*/ ); //file.write(input.c_str(), input.length() ); file.write(&input[0], len); } void read_binary(std::fstream &file){ std::string content; size_t len; file.read(reinterpret_cast<char*>(&len), sizeof(len) ); content.resize(len); file.read(&content[0], len); std::cout << "\n|READ OUT| : " << content << "\n"; }
-
Sorry, Zeile 8 das .size() ist käse
-
Das ist ja auch was völlig anderes. Code ist Logik pur, kein zusammengeschmissener Zeichensalat. Du musst von jedem Zeichen in deinem Code ganz genau wissen, ob und warum du es wo setzt. Das gilt natürlich auch, wenn du hier nach der Richtigkeit von Codebeispielen fragst, denn Ungenauigkeiten in dieser Hinsicht sind in der Programmierung sofort sinnentstellend.
Ich könnte schwören, dass ich dir das alles schon einmal gesagt habe.
-
Das ist ja auch was völlig anderes.
Manchmal sprichst du in Rätseln.
Ich könnte schwören, dass ich dir das alles schon einmal gesagt habe.
Ja, gut möglich. Aber wenn die Scheiße oft nicht so will wie ich will .... F**k gerade am Anfang ist es schon oft deprimierend... Ich weiß nicht, ich glaub oft wenn man nicht soviel mit programmieren am Hut hat, man sich manchmal doch leichter tut am Anfang. Also ich ertappe mich immer wieder das ich mal 3 Kaptiel überspringe, weil ich jetzt XYZ machen will.
-
void writeString(std::fstream &file, std::string &str) { file << str.length() << ' '; //write length and seperator file << str; //write string } std::string readString(std::fstream &file) { size_t len; file >> len; // Read length file.ignore(); //skip ' ' std::string data; data.resize(len); //reserve space for string file.read(&data[0], len); //read string return data; }
Jetzt haben wir hier doch schon seit Ewigkeiten diese funktionierende Variante (hier mal mit size_t, unsere Diskussion ist für den TS vermutlich eh irrelevant).
Warum versucht du denn jetzt wieder irgendwas eigenes zu basteln wobei das die perfekte Lösung wäre? Versuch doch lieber zu verstehen warum wir das so machen und nicht anders.
-
Weil:
Ich habe jetzt für "Schreiben und Lesen" mal alle Varianten ausprobiert
Nur weil ich die "perfekte" Variante danke euch ja bereits habe und auch verstanden habe, heißt es ja nicht, das ich mit mit den anderen Sachen nicht mehr auseinandersetzen muss /kann /will.
Hauptsächlich ging es mir ja darum, welches hiervon:
file.write(input.c_str(), input.length() ); file.write(&input[0], len);
welche Vor / Nachteile hat
-
beg__ schrieb:
Hauptsächlich ging es mir ja darum, welches hiervon:
file.write(input.c_str(), input.length() ); file.write(&input[0], len);
welche Vor / Nachteile hat
<a href= schrieb:
C++ Peference - std::data">Returns a pointer to an array that contains a null-terminated sequence of characters (i.e., a C-string) representing the current value of the string object.
This array includes the same sequence of characters that make up the value of the string object plus an additional terminating null-character ('\0') at the end.
The pointer returned points to the internal array currently used by the string object to store the characters that conform its value.
Both string::data and string::c_str are synonyms and return the same value.
Macht beides das selbe. Mal davon abgesehen dass
string::data
undstring::c_str
am Ende des strings noch ein Nullbyte als Terminator garantieren.
-
Danke!