Binarna i niebinarna serializacja w C++ jest podchwytliwa i jeśli nie pisze się tego dla zabawy lub nauki, powinno sięgać się po biblioteki jak alpaca
, nlohmann/json
czy coś z boost
które te rzeczy zrobią z automatu będąc odpornymi na większość błędów :P
W obecnym kodzie zapisujesz reprezentację bajtów MyStruct
w pamięci do pliku - czyli dwie zmienne typu uint64_t
oraz wewnętrzną reprezentację std::string
która składa się ze wskaźnika na Twój łańcuch znakowy i innych duperełek które std::string
wykorzystuje pod spodem do poprawnego działania. Żadnego łańcucha znaków w środku nie znajdziesz.
Pomijam już kwestie wrzucania pustych bajtów przez kompilator do struktury oraz różnic w niektórych typach w zależności od architektury (size_t
itp.).
Jeśli Twoim celem było zapisanie tego do pliku z możliwością wiernego odtworzenia, trzeba zserializować każdą zmienną oddzielnie. Podobnie z odczytem.
Jak to zrobić poprawnie, to już zupełnie inna sprawa zależna od zmiennej, w przypadku std::string
wystarczy rozmiar i ciąg znaków.
https://godbolt.org/z/evsrK1P5j