我已经吸取了教训,所以我会做短暂的,并且对于这个小学。
我需要一个函数,在我的类中,可以逐行读取文件,并将它们存储到数组/字符串中,以便我可以使用它。
我有以下例子(请不要笑,我是个乞丐):
int CMYCLASS::LoadLines(std::string Filename)
{
std::ifstream input(Filename, std::ios::binary | ios::in);
input.seekg(0, ios::end);
char* title[1024];
input.read((char*)title, sizeof(int));
// here what ?? -_-
input.close();
for (int i = 0; i < sizeof(title); i++)
{
printf(" %.2X ";, title[i]);
}
printf("\");
return 0;
}
答案 0 :(得分:4)
我不确定你在问什么。
但是 - 下面是一些代码,它逐行读取文件并将行存储在向量中。代码还会打印行 - 包括文本行和每个字符的整数值。希望它有所帮助。
<invoiceReferenceNotificationMessage>
由于您的原始代码我不笑 - 没办法 - 我也曾经是初学者。但是你的代码是c风格的代码,包含很多bug。所以我的建议是:请改用c ++风格。例如:从不使用C风格的字符串(即char数组)。这很容易出错...
由于您是初学者(您自己的话:),请让我解释一下您的代码:
int main()
{
std::string Filename = "somefile.bin";
std::ifstream input(Filename, std::ios::binary | ios::in); // Open the file
std::string line; // Temp variable
std::vector<std::string> lines; // Vector for holding all lines in the file
while (std::getline(input, line)) // Read lines as long as the file is
{
lines.push_back(line); // Save the line in the vector
}
// Now the vector holds all lines from the file
// and you can do what ever you want it
// For instance we can print the lines
// Both as a line and as the hexadecimal value of every character
for(auto s : lines) // For each line in vector
{
cout << s; // Print it
for(auto c : s) // For each character in the line
{
cout << hex // switch to hexadecimal
<< std::setw(2) // print it in two
<< std::setfill('0') // leading zero
<< (unsigned int)c // cast to get the integer value
<< dec // back to decimal
<< " "; // and a space
}
cout << endl; // new line
}
return 0;
}
这不是一个字符串。它是1024个指向字符的指针,也可以通过1024个指针指向c风格的字符串。但是 - 你没有为保留字符串保留任何内存。
正确的方法是:
char* title[1024];
在这里,您必须确保输入文件少于1024行,并且每行少于256个字符。
这样的代码非常糟糕。如果输入文件有1025行怎么办?
这是c ++帮助你的地方。使用std :: string,您不必担心字符串的长度。 std :: string容器只会根据你输入的大小进行调整。
std :: vector就像一个数组。但没有固定的大小。所以你可以继续添加它,它会自动调整大小。
所以c ++提供了std :: string和std :: vector来帮助你处理输入文件的动态大小。使用它......
祝你好运。