我不确定你的问题是什么。
但是,以下是一些代码,逐行读取文件并将这些行存储在向量中。该代码还打印行 - 作为文本行和每个字符的整数值。希望它有所帮助。
int main()
{
std::string Filename = "somefile.bin";
std::ifstream input(Filename, std::ios::binary | ios::in);
std::string line;
std::vector<std::string> lines;
while (std::getline(input, line))
{
lines.push_back(line);
}
for(auto s : lines)
{
cout << s;
for(auto c : s)
{
cout << hex
<< std::setw(2)
<< std::setfill('0')
<< (unsigned int)c
<< dec
<< " ";
}
cout << endl;
}
return 0;
}
我不是因为你的原始代码而笑 - 没有办法 - 我也曾经是一个初学者。但是你的代码是c语言风格的,包含了很多错误。所以我的建议是:请使用c++风格代替。例如:永远不要使用C风格的字符串(即char数组)。它太容易出错了...
由于你是一个初学者(你自己的话 :)),让我解释一下关于你的代码的一些事情:
char* title[1024];
这不是一个字符串。它是1024个指向字符的指针,也可以是1024个指向C风格字符串的指针。然而 - 你没有为存储字符串保留任何内存。
正确的方式是:
char title[1024][256]; // 1024 lines with a maximum of 256 chars per line
在此,您需要确保输入文件的行数不超过1024行,每行字符数不超过256个。
像这样的代码非常糟糕。如果输入文件有1025行怎么办?
这就是c++帮助您的地方。使用std::string,您不需要担心字符串的长度。std::string容器将自动调整为您放入其中的大小。
std::vector类似于数组,但没有固定大小。因此,您可以继续添加元素,它会自动调整大小。
因此,c++提供了std::string和std::vector来帮助您处理输入文件的动态大小。使用它...
祝您好运。
std::string
和std::vector
。使用std::getline
进行读取。或者您可以使用istream迭代器,曾经推荐它是“展示自己属于C++内部人士”的方式之一,但实际上这只是混淆视听。显式循环对于传达循环操作非常有用。 - Cheers and hth. - Alfwhile
”是你老师的要求,那么最好全文逐字陈述一下需求。除此之外,这听起来毫无意义。 - Cheers and hth. - Alfsizeof(int)
个字符到标题中(通常为4),但稍后您却打印了全部1024个字符。顺便说一句,在c++中,请使用std::string代替c风格的字符数组。此外,请使用cout而不是printf。 - Support Ukraine