[ROOT] RE:Re: ostrstream with 3.00-05

From: Masaharu Goto (MXJ02154@nifty.ne.jp)
Date: Sat Feb 17 2001 - 13:22:36 MET


Hello Otto and Rene,

This is an interesting problem. I could reproduce this but 
could not find anything wrong. The problem occurs both on
root2.25(cint5.14.50) and root3.00(cint5.14.76). Further,
I tried this on a couple of compilers. On Visual C++, compiled
code generated wrong output also. 

I suspect operator<<(ostream,T& x) does not guarantee adding '\0'
at the end of string stream.  Although g++ works fine under Linux,
it can be just an coincidence.  I read back ANSI/ISO C++ standard
but can not find anything about this point.
I believe you need to add  '\0' at the end.

  buf << 7 << "_" << '\0';

Thank you
Masaharu Goto



------------------------------------------------------
#ifdef __CINT__
#include </cint/include/iostream.h>
#else
#include <iostream.h>
#include <strstrea.h>
#endif
t585() {
  ostrstream buf;
  buf << 7 << "_";
  cout << buf.str() << endl;
}
main() {
  t585();
  t585();
  t585();
  t585();
  t585();
  t585();
  t585();
  t585();
  t585();
}
-----------------------------------------------------
### Windows Visual C++ output
7_:\WIND
7_TEM;C:
7_S;C:\W
7_OS~2\C
7_C:\PRO
7_MON\TO
7_A~1\MI
7_C98\BI
7_GRA~1\
------------------------------------------------------
### Windows CINT output
7_
7_
7_e
7_e
7_
7_
7_
7_
7_
------------------------------------------------------
### Linux g++ output
7_
7_
7_
7_
7_
7_
7_
7_
7_
------------------------------------------------------



>Date: Fri, 16 Feb 2001 18:23:39 +0000
>From: Rene Brun <Rene.Brun@cern.ch>
>To: Otto.Schaile@Physik.Uni-Muenchen.DE, rootdev@pcroot.cern.ch
>Subject: Re: ostrstream  with 3.00-05
>
>Hi Masa,
>This problem has been reported by Otto.
>
>Rene
>
>Otto.Schaile@Physik.Uni-Muenchen.DE wrote:
>> 
>> Hi Rene,
>> I am on 2.2.16-bl-0.1. Red Hat Linux release 6.2 (Zoot)
>> 
>>   *   Version   2.25/03 14 September 2000   *
>> root [0] ostrstream buf;
>> root [1] buf << 7 << "_"
>> (class ostream)138912716
>> root [2] cout << buf.str()  <<endl;
>> 7_
>> 
>> thats fine
>> 
>> now with
>>   *   Version   3.00/05  16 February 2001   *
>> root [0] ostrstream buf;
>> root [1] buf << 7 << "_"
>> (class ostream)139462988
>> root [2] cout << buf.str()  <<endl;
>> 7_カ@?スカ@
>> root [3] .q
>> 
>> this looks not so good
>> Something changed with CINT?
>> 
>> Cheers
>> Otto
>> 
>> Dr. Otto Schaile            Sektion Physik, LMU Muenchen
>> Phone: +49 89 289 14070     Am Coulombwall 1, D-85748 Garching, Germany
>> GSM:   +49 171 4312031
>> FAX:   +49 89 289 14072     EMail: Otto.Schaile@Physik.Uni-Muenchen.DE



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:36 MET