Doğrudan bir ham bellek arabelleğinden okur bir istream
oluşturmaya çalışıyorum.istream :: tellg(), özel streambuf sınıfımla kullanıldığında -1 değerini döndürür mü?
Ben burada başka bir yazı bunu yapmanın güzel bir yol bulmuş: Ben oluşturmak Sonra
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
benim istream
bu membuf
kullanarak: Sonra getline()
ve >>
operatörlerini kullanarak okumak
membuf mb(dataPointer, dataLength);
istream reader(&mb);
, ve her şey harika. Ancak, arabamın başına geri sarmak için seekg()
kullanamıyorum ve istream::tellg()
her zaman -1
döndürür.
Bunların çalışması için daha fazla kod yazmam gerekiyor mu, yoksa bu başarısızlığa mı yol açıyor?
_know_ 'seekg()' geri sarmıyor musunuz? Tellg() 'nin düzgün çalıştığını kanıtladınız mı? –
Evet, seekg (0) çağrıldıktan sonra getline() ilk satırımı okuyor. Tellg() işlevi, her zaman -1 değerini döndürdüğü için kesinlikle çalışmaz (arabamdan okumaya başladığımda bile). Bo'nun cevabının buraya gitmenin yolu olduğuna inanıyorum ... – EdSanville
E @ dSanville: OK; Sorunuzu buna göre açıkladım. –