我读过其他帖子,但根本没有任何帮助, 这段代码没有错误,还有bad_alloc错误...
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char super[25];
char name[25],last_name[25];
int length;
char *sym = "#";
char *buffer;
ofstream outfile;
outfile.open("farses.dat",ios::app);
cout << "Writing to the file" << endl;
cout << "Enter your First Name: ";
cin >> name;
outfile << *sym;
outfile << name << endl;
cout << "Enter your Last Name: ";
cin >> last_name;
outfile << *sym;
outfile << last_name << endl;
cout << "Enter The Sentence : ";
cin.getline(super,25);
outfile << super << endl;
outfile.close();
ifstream infile;
infile.open("frases.dat");
infile.seekg(0, ios::end);
length = infile.tellg();
infile.seekg(0,ios::beg);
buffer = new char[length];
infile.read(buffer , length);
cout << "\n\nReading from file \n\n" << endl;
cout << buffer << endl;
infile.close();
return 0;
}
此代码在到达句子语句后终止.. getline()函数导致问题我猜但当我尝试其他两个语句(name和last_name),getline()时,它完美地工作..甚至将char限制降级为5但是在句子语句之后仍然抛出
答案 0 :(得分:2)
Thumb规则,不要误以为你的代码没有错误。特别是当你明显出错。这种心态会让你无法找到错误,因为你看到的一切都是正确的。
您从未检查过您的流是否已打开,并且您在ofstream中输入了错误的文件名。
当您将数据写入文件名farses.dat
然后尝试打开一个名为frases.dat
的文件(我假设它是正确的名称,它意味着句子)时会发生什么。
您正在获取不存在的文件的光标位置ifstream::tellg,并且它失败,因此该函数返回-1。这是分配缓冲区之前的长度值。
当您分配缓冲区时,会出现bad_alloc异常(bad_array_new_length)。
检查文件是否已打开,至少可以节省一些调试时间。 像这样的东西,
ifstream infile;
infile.open("frases.dat");
if ( infile.is_open() ) {
// File is open, do stuff (...)
if ( length <= 0 ) {
// Empty file / error, don't create buffer!!!
}
// (...)
infile.close();
}
else {
// Couldn't open file
}
编辑:修正了错误解释。