我正在使用流读取 C++ 中的文件,特别是 fstream,而不是 ifstream。
blah blah blah\n
blah blah\n
blah blah blah blah \n
end
这一遍又一遍地重复着
- 每行有可变数量的 blah,
- 每一端之间的行数恒定,end是这里的分隔符
我想读取一组数据,然后将其存储在字符数组中,采用 C 风格结构。我开始尝试使用 getline() 但分隔符只能是一个字符,而不是三个。我显然不能尝试仅使用 read() 来读取一组字节数,因为每个集合的字节数都不同。
因此,我对这里要做的最简单(也是最可靠)的事情感到困惑。我是否应该调用 getline 直到找到“结束”字符串,同时一遍又一遍地附加每个字符串?
我尝试了一个 2D 字符数组,但复制到它有点麻烦。我可以在这里使用 strncpy 吗?我认为这行不通
char buf[10][10];
strncpy(buf[1], "blah blah",10);
我在这里有一些想法,但我不确定哪一个(或我没有想到的)是最好的。
编辑: 所以这是针对网络应用程序的,因此字符数组(或字符串)的大小应该始终相同。此外,结构中不应有指针。
相关问题:char数组和std::string在内存中的存储方式是一样的吗?我总是认为 std::string 有一些开销。
最佳答案
好吧,你说“在 C 风格的结构中”,但也许你可以只使用 std::string
?
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int main(void)
{
std::fstream file("main.cpp");
std::vector<std::string> lines;
std::string line;
while (getline(file, line))
{
if (line == "end")
{
break;
}
std::cout << line << std::endl;
lines.push_back(line);
}
// lines now has all the lines up-to
// and not including "end"
/* this is for reading the file
end
some stuff that'll never get printed
or addded blah blah
*/
};
关于c++ - 在结构中存储可变大小的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828021/