我有一个计算很多数字的程序,我无法将数据存储在数组中,因为RAM内存对于数据来说不够大。所以我写了一些代码,将数据放在.txt文件中。 在同一个程序中,我必须逐个加载它以使用openGL / GLUT显示数据。
现在,.txt文件如下所示:
number1;number 2;number3;number4;......number N;
number1;number 2;number3;number4;......number N;
number1;number 2;number3;number4;......number N;
...................................................................................
number1;number 2;number3;number4;......number N;
注意数字N后;来了一个“\ n”(输入)。这条线长2500个数字。
我必须逐行加载数据,所以我使用getline();
但每一帧都需要下一行。
为了简化一下,以下是要阅读的代码:
ifstream file("example.txt", ifstream::in);
if(file.is_open())
{
getline(file, b);
cout<<b<<"\n"<<"\n";
file.close();
}
此代码不是真实程序中的代码,但会显示问题。
这里的代码工作正常,它可以简单地加载第一行并在控制台屏幕上显示它。 它是在openGL中的每一帧。 所以每次opengl开始一个新的框架时我的控制台屏幕都会不断更新。
但是当我添加这个:
ifstream file("example.txt", ifstream::in);
if(file.is_open())
{
getline(file, b);
strcpy(resultch, b.c_str());
cout<<b<<"\n"<<"\n";
file.close();
}
(结果是声明为:char* resultch = new char[2550];
)
代码只运行一次,程序停止后,控制台屏幕显示:
proces returned -1073741819 <0x0000005>
为什么每次都没有正常运行?
答案 0 :(得分:0)
如果您:
怎么办?ifstream file("example.txt", ifstream::in);
if(file.is_open())
{
getline(file, b);
resultch = malloc( b.length() + 1 );
strcpy(resultch, b.c_str());
cout<<b<<"\n"<<"\n";
file.close();
free( resultch );
}
我添加的只是根据字符串的大小分配内存。
答案 1 :(得分:-1)
试试这个:
ifstream infile;
infile.open ("example.txt", ifstream::in);
std::string line("");
int ch = infile.get();
while (infile.good()) {
if ((char)ch=='\n'){
resultch = line.c_str();
line = "";
cout << endl << endl;
}
else {
line = line + (char)ch;
cout << (char)ch;
}
ch = infile.get();
}
infile.close();
这可能就是你要找的东西。