Вы не должны использовать неотформатированные функции ввода / вывода (read()
и write()
), если вы просто хотите записать обычные читаемые человеком строковые данные.Обычно вы используете эти функции только тогда, когда вам нужно читать и записывать компактные двоичные данные, которые для новичка, вероятно, не нужны.Вместо этого вы можете написать обычные строки текста:
std::string text = "This is some test data.";
{
std::ofstream file("data.txt");
file << text << '\n';
}
Затем прочитать их обратно с помощью getline()
:
{
std::ifstream file("data.txt");
std::string line;
std::getline(file, line);
// line == text
}
Вы также можете использовать обычный оператор форматирования >>
для чтения,но при применении к string
он читает токены (непробельные символы, разделенные пробелами), а не целые строки:
{
std::ifstream file("data.txt");
std::vector<std::string> words;
std::string word;
while (file >> word) {
words.push_back(word);
}
// words == {"This", "is", "some", "test", "data."}
}
Все отформатированные функции ввода-вывода автоматически обрабатывают управление памятьюдля вас, поэтому нет необходимости беспокоиться о длине ваших строк.