gpt4 book ai didi

C++ fstream : how to know size of string when reading?

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:16 26 4
gpt4 key购买 nike

...有人可能还记得,我仍然停留在 C++ 字符串上。好的,我可以使用 fstream 将字符串写入文件,如下所示

outStream.write((char *) s.c_str(), s.size());

当我想读取那个字符串时,我可以这样做

inStream.read((char *) s.c_str(), s.size());

一切都按预期进行。问题是:如果我在将字符串写入文件之后和再次读取之前更改了字符串的长度,打印该字符串不会使我恢复原来的字符串,而是更短/更长的字符串。所以:如果我必须在一个文件中存储许多字符串,我如何在读回文件时知道它们的大小?

非常感谢!

最佳答案

如果您只想编写普通的人类可读字符串数据,则不应使用未格式化的 I/O 函数(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 时,它会读取 tokens(非空白字符分隔通过空格),而不是整行:

{
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."}
}

所有格式化 I/O 函数都会自动为您处理内存管理,因此无需担心字符串的长度。

关于C++ fstream : how to know size of string when reading?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com