Hi George, TBuffer &TBuffer::operator>>(Char_t *c) was indeed broken and I've fixed it as per your suggestion. Cheers, Fons. George Heintzelman wrote: > > Hi, > > I'm using TBuffers so I can use Root streamers for writing to > non-filesystem places (in my case an oracle database, but that doesn't > really matter) and in the course of working with some char * variables > came upon this: > > inline TBuffer &TBuffer::operator>>(Char_t *c) > { > ReadString(c, sizeof(c)); > return *this; > } > > inline TBuffer &TBuffer::operator<<(const Char_t *c) > { > WriteString(c); > return *this; > } > > where ReadString takes a maximum number of bytes parameter and > WriteString writes up to the terminating 0 in the string passed. > > With this code, using operator>> on a Char_t * variable will not read > in the reverse of one that was written with an operator<<, since the > sizeof(c) call will always resolve to 4 or maybe 8 on some machines. > > I think the best way to deal with that is for the operator>> to be > cavalier about it and just overwrite memory, since it has no way of > knowing how big the buffer it should write into is, and since the user > programmer is working with char *'s, it's his responsibility to make > sure the memory allocation and stuff is correct. If it breaks, one just > shrugs and says, "you should've used TString..."; but I think it's > unfair for the user to be bitten by operator>> not reading in, in > exactly the same way, what operator<< wrote out. > > George Heintzelman > gah@bnl.gov -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:40 MET