IMHO, правильный метод - сначала записать длину строки, а затем ее содержимое:
const std::string example_text = "Redwood trees are very tall.";
const unsigned int length = example_text.length();
outfile.write((char *) &length, sizeof(length));
outfile.write(example_text.data(), length);
Это позволяет использовать чтение блока:
unsigned int length;
outfile.read((char *) &length, sizeof(length));
std::string text;
text.reserve(length);
outfile.read(text.data(), length);