-2

我有一个程序可以计算很多数字,我无法将数据存储在数组中,因为 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();
}

(如果 resultch 被声明为:)char* resultch = new char[2550];代码只运行 1 次并且程序在它之后停止,控制台屏幕比说:

proces returned -1073741819 <0x0000005>

为什么每次都不能正常运行?

4

2 回答 2

0

What if you:

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 );
}

All I added was to allocate memory based on the size of the string.

于 2013-03-28T19:41:43.023 回答
-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();

这可能就是你要找的。

于 2013-03-28T17:46:26.060 回答