【发布时间】:2011-10-09 11:16:42
【问题描述】:
我正在尝试创建一个直接从原始内存缓冲区读取的istream。
我在这里的另一篇文章中找到了一个很好的方法:
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
然后我使用这个membuf 创建我的istream:
membuf mb(dataPointer, dataLength);
istream reader(&mb);
然后我使用getline() 和>> 运算符阅读,一切都很棒。但是,我似乎无法使用seekg() 倒回到缓冲区的开头,并且istream::tellg() 总是返回-1。
我是否需要编写更多代码才能使这些工作正常运行,还是注定要失败?
【问题讨论】:
-
你知道
seekg()没有倒带吗?您是否证明tellg()工作正常? -
是的,在调用 seekg(0) 之后,getline() 不会读取我的第一行。 tellg() 函数肯定不起作用,因为它总是返回 -1,(即使我刚开始从缓冲区读取)。我相信博的答案是去这里的路......
-
E@dSanville:好的;我相应地澄清了你的问题。