0

这段代码有什么问题吗?这是读取数据库数据的功能的一部分。ootl_stream数据库输出流的对象。我的导师告诉我,我在这段代码中有错误,我是 C++ 的新手,不知道是什么问题......我必须使用指针,所以请不要告诉我使用静态 char 数组。

char* temp_char;

while (!o.eof()) {

   temp_char = new char [31];
   o>>temp_char;

   records.push_back(temp_char);

   delete[] temp_char;

}
4

2 回答 2

2

o.eof()仅在您尝试读取流的末尾后才变为真,因此您不应该使用while(!o.eof())循环控制。

除非recods.push_back(temp_char)复制指向的数组,records否则后面会包含一个悬空指针delete[] temp_char;

while(true) {
    temp_char = new char[31];
    o >> temp_char;
    if (!o) {
        delete[] temp_char;
        break;
    }
    records.push_back(temp_char);
}

看起来更好(尽管我确信这不是惯用的)。

当然,使用std::string会减轻你的内存管理。

于 2013-01-12T21:52:26.470 回答
0

每次我读一个单词时,我都不会重新分配字符串。如果最后一次迭代读取空格,则会推回一个空字符串。

    char* temp_char = new char[BUF_SZ];

    while ( ! o.eof() ) {

       o>>temp_char;
if( *temp_char != '\0' ) // If not an empty string
       records.push_back(temp_char);

    }

    delete[] temp_char;
于 2013-01-12T22:34:45.853 回答