public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* [c++ stl] std::string bug?
@ 2002-02-27  5:31 Gwenaël Durand
  2002-03-04 22:49 ` Dylan Cuthbert
  0 siblings, 1 reply; 3+ messages in thread
From: Gwenaël Durand @ 2002-02-27  5:31 UTC (permalink / raw)
  To: cygwin

Hi,

It seems that one constructor of the std::string class or the data() method
doesn't work properly.

string::data() and string::c_str() are supposed to be equivalent but don't
always behave the same.

have a look at the following  code and its test.

....?

Thanks,
Gwenaël

PS: I update cygwin this morning => 1.3.9
__________________________________
#include <iostream>
#include <string>
using namespace std;

void foo(const std::string& _str){
      cout<<"foo: cout<<_str            => "<< _str   <<endl;
      cout<<"foo: cout<<_str.data() => "<< _str.data()  <<endl;
      cout<<"foo: cout<<_str.c_str()=> "<< _str.c_str() <<endl;
      cout<<"foo: _str.length()         => "<< _str.length()<<endl<<endl;
}

void main(int argc, char **argv)
{
  std::string str;
  if (argc > 1) str = argv[1];
  else str = "OOOOOOO";

  cout<<"----------foo(str);"<<endl;
  foo(str);

  cout<<"----------foo(\"say hello!\");"<<endl;
  foo("say hello!");

  cout<<"----------foo(\"...\");"<<endl;
  foo("...");

  cout<<"----------foo(str);"<<endl;
  foo(str);
}
_________________________________

> g++ code.cpp -o code.exe
> code.exe
----------foo(str);
foo: cout<<_str            => OOOOOOO
foo: cout<<_str.data()  => OOOOOOO
foo: cout<<_str.c_str() => OOOOOOO
foo: _str.length()           => 7

----------foo("say hello!");
foo: cout<<_str           => say hello!
foo: cout<<_str.data() => say hello!
foo: cout<<_str.c_str()=> say hello!
foo: _str.length()         => 10

----------foo("...");
foo: cout<<_str           => ...
foo: cout<<_str.data() => ... hello!                    <<<<<=========
???????????!!!!!!!
foo: cout<<_str.c_str()=> ...
foo: _str.length()         => 3

----------foo(str);
foo: cout<<_str           => OOOOOOO
foo: cout<<_str.data() => OOOOOOO
foo: cout<<_str.c_str()=> OOOOOOO
foo: _str.length()          => 7
>
__________________________________

From my cygcheck.out:
    Cygwin DLL version info:
        DLL version: 1.3.9
        DLL epoch: 19
        DLL bad signal mask: 19005
        DLL old termios: 5
        DLL malloc env: 28
        API major: 0
        API minor: 51
        Shared data: 3
        DLL identifier: cygwin1
        Mount registry: 2
        Cygnus registry name: Cygnus Solutions
        Cygwin registry name: Cygwin
        Program options name: Program Options
        Cygwin mount registry name: mounts v2
        Cygdrive flags: cygdrive flags
        Cygdrive prefix: cygdrive prefix
        Cygdrive default prefix:
        Build date: Mon Jan 21 12:48:41 EST 2002
        Shared id: cygwin1S3


Cygwin Package Information
Last downloaded files to: E:\downloads\Cygwin
Last downloaded files from:
ftp://ftp.uni-erlangen.de/pub/pc/gnuwin32/cygwin/mirrors/cygnus

Package             Version
ash                 20020131-1
autoconf            2.52a-1
autoconf-devel      2.52-4
autoconf-stable     2.13-4
automake            1.5b-1
automake-devel      1.5-5
automake-stable     1.4p5-5
bash                2.05a-3
binutils            20011002-1
curl                7.9.3-1
cygutils            0.9.9-1
cygwin              1.3.9-1
diff                0.0
fileutils           4.1-1
findutils           4.1
gawk                3.0.4-1
gcc                 2.95.3-5
gdbm                1.8.0-3
grep                2.5g
groff               1.17.2-1
gzip                1.3.2-1
jbigkit             1.2-6
jpeg                6b-7
less                358-3
libintl             0.10.38-3
libintl1            0.10.40-1
libncurses5         5.2-1
libncurses6         5.2-8
libpng              1.0.12-1
libpng2             1.0.12-1
libreadline4        4.1-2
libreadline5        4.2a-1
libxml2             2.4.13-1
libxslt             1.0.10-1
login               1.4-3
m4                  0.0
make                3.79.1-5
man                 1.5g-2
mingw-runtime       1.2-1
mktemp              1.4-1
ncurses             5.2-8
newlib-man          20001118-1
opengl              1.1.0-5
openssl             0.9.6c-3
pcre                3.7-1
perl                5.6.1-2
popt                1.6.2-1
readline            4.2a-1
sed                 3.02-1
sh-utils            2.0-2
tar                 1.13.19-1
termcap             20010825-1
terminfo            5.2-1
textutils           2.0.21-1
tiff                3.5.7-1
vim                 6.0.93-1
w32api              1.2-1
wget                1.8.1-1
which               1.5-1
xpm-nox             4.2.0-1
zlib                1.1.3-7




--
______________________________________
Gwenael . Durand@laposte . net
http://perso.wanadoo.fr/gwenael.durand
______________________________________



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [c++ stl] std::string bug?
  2002-02-27  5:31 [c++ stl] std::string bug? Gwenaël Durand
@ 2002-03-04 22:49 ` Dylan Cuthbert
  0 siblings, 0 replies; 3+ messages in thread
From: Dylan Cuthbert @ 2002-03-04 22:49 UTC (permalink / raw)
  To: cygwin

data doesn't necessarily return a zero-terminated string, it simply returns
a ptr to the raw data.  It is only zero-terminated if you call c_str() which
is, of course, why there are two functions in the first place.

This is in the wrong mailing list however, redirect it to the appropriate
gnu gcc mailing list.

Regards

---------------------------------
Q-Games, Dylan Cuthbert.
http://www.q-games.com/personal/utils

"Gwenaël Durand" <Gwenael.dot.Durand@laposte.dot.net> wrote in message
news:3C7CD2F8.C533D7AC@laposte.dot.net...
> Hi,
>
> It seems that one constructor of the std::string class or the data()
method
> doesn't work properly.
>
> string::data() and string::c_str() are supposed to be equivalent but don't
> always behave the same.
>
> have a look at the following  code and its test.
>
> ....?
>
> Thanks,
> Gwenaël
>
> PS: I update cygwin this morning => 1.3.9
> __________________________________
> #include <iostream>
> #include <string>
> using namespace std;
>
> void foo(const std::string& _str){
>       cout<<"foo: cout<<_str            => "<< _str   <<endl;
>       cout<<"foo: cout<<_str.data() => "<< _str.data()  <<endl;
>       cout<<"foo: cout<<_str.c_str()=> "<< _str.c_str() <<endl;
>       cout<<"foo: _str.length()         => "<< _str.length()<<endl<<endl;
> }
>
> void main(int argc, char **argv)
> {
>   std::string str;
>   if (argc > 1) str = argv[1];
>   else str = "OOOOOOO";
>
>   cout<<"----------foo(str);"<<endl;
>   foo(str);
>
>   cout<<"----------foo(\"say hello!\");"<<endl;
>   foo("say hello!");
>
>   cout<<"----------foo(\"...\");"<<endl;
>   foo("...");
>
>   cout<<"----------foo(str);"<<endl;
>   foo(str);
> }
> _________________________________
>
> > g++ code.cpp -o code.exe
> > code.exe
> ----------foo(str);
> foo: cout<<_str            => OOOOOOO
> foo: cout<<_str.data()  => OOOOOOO
> foo: cout<<_str.c_str() => OOOOOOO
> foo: _str.length()           => 7
>
> ----------foo("say hello!");
> foo: cout<<_str           => say hello!
> foo: cout<<_str.data() => say hello!
> foo: cout<<_str.c_str()=> say hello!
> foo: _str.length()         => 10
>
> ----------foo("...");
> foo: cout<<_str           => ...
> foo: cout<<_str.data() => ... hello!                    <<<<<=========
> ???????????!!!!!!!
> foo: cout<<_str.c_str()=> ...
> foo: _str.length()         => 3
>
> ----------foo(str);
> foo: cout<<_str           => OOOOOOO
> foo: cout<<_str.data() => OOOOOOO
> foo: cout<<_str.c_str()=> OOOOOOO
> foo: _str.length()          => 7
> >
> __________________________________
>
> From my cygcheck.out:
>     Cygwin DLL version info:
>         DLL version: 1.3.9
>         DLL epoch: 19
>         DLL bad signal mask: 19005
>         DLL old termios: 5
>         DLL malloc env: 28
>         API major: 0
>         API minor: 51
>         Shared data: 3
>         DLL identifier: cygwin1
>         Mount registry: 2
>         Cygnus registry name: Cygnus Solutions
>         Cygwin registry name: Cygwin
>         Program options name: Program Options
>         Cygwin mount registry name: mounts v2
>         Cygdrive flags: cygdrive flags
>         Cygdrive prefix: cygdrive prefix
>         Cygdrive default prefix:
>         Build date: Mon Jan 21 12:48:41 EST 2002
>         Shared id: cygwin1S3
>
>
> Cygwin Package Information
> Last downloaded files to: E:\downloads\Cygwin
> Last downloaded files from:
> ftp://ftp.uni-erlangen.de/pub/pc/gnuwin32/cygwin/mirrors/cygnus
>
> Package             Version
> ash                 20020131-1
> autoconf            2.52a-1
> autoconf-devel      2.52-4
> autoconf-stable     2.13-4
> automake            1.5b-1
> automake-devel      1.5-5
> automake-stable     1.4p5-5
> bash                2.05a-3
> binutils            20011002-1
> curl                7.9.3-1
> cygutils            0.9.9-1
> cygwin              1.3.9-1
> diff                0.0
> fileutils           4.1-1
> findutils           4.1
> gawk                3.0.4-1
> gcc                 2.95.3-5
> gdbm                1.8.0-3
> grep                2.5g
> groff               1.17.2-1
> gzip                1.3.2-1
> jbigkit             1.2-6
> jpeg                6b-7
> less                358-3
> libintl             0.10.38-3
> libintl1            0.10.40-1
> libncurses5         5.2-1
> libncurses6         5.2-8
> libpng              1.0.12-1
> libpng2             1.0.12-1
> libreadline4        4.1-2
> libreadline5        4.2a-1
> libxml2             2.4.13-1
> libxslt             1.0.10-1
> login               1.4-3
> m4                  0.0
> make                3.79.1-5
> man                 1.5g-2
> mingw-runtime       1.2-1
> mktemp              1.4-1
> ncurses             5.2-8
> newlib-man          20001118-1
> opengl              1.1.0-5
> openssl             0.9.6c-3
> pcre                3.7-1
> perl                5.6.1-2
> popt                1.6.2-1
> readline            4.2a-1
> sed                 3.02-1
> sh-utils            2.0-2
> tar                 1.13.19-1
> termcap             20010825-1
> terminfo            5.2-1
> textutils           2.0.21-1
> tiff                3.5.7-1
> vim                 6.0.93-1
> w32api              1.2-1
> wget                1.8.1-1
> which               1.5-1
> xpm-nox             4.2.0-1
> zlib                1.1.3-7
>
>
>
>
> --
> ______________________________________
> Gwenael . Durand@laposte . net
> http://perso.wanadoo.fr/gwenael.durand
> ______________________________________
>
>
>
> --
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> Bug reporting:         http://cygwin.com/bugs.html
> Documentation:         http://cygwin.com/docs.html
> FAQ:                   http://cygwin.com/faq/
>
>




--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: [c++ stl] std::string bug?
@ 2002-02-27  7:40 Robinow, David
  0 siblings, 0 replies; 3+ messages in thread
From: Robinow, David @ 2002-02-27  7:40 UTC (permalink / raw)
  To: 'Gwenaël Durand', cygwin

> From: Gwenaël Durand [mailto:Gwenael.dot.Durand@laposte.dot.net]
> Subject: [c++ stl] std::string bug?
> 
> It seems that one constructor of the std::string class or the 
> data() method
> doesn't work properly.
> 
> string::data() and string::c_str() are supposed to be 
> equivalent but don't always behave the same.
 I don't believe data() and c_str() are supposed to be the same.
 If I remember correctly, data() is not guaranteed to be null-terminated.
> 
> have a look at the following  code and its test.
> 
> ....?

> 
> PS: I update cygwin this morning => 1.3.9
 This is most likely irrelevant.
> gcc                 2.95.3-5
  This is interesting.  Now we can try this compiler on a non-cygwin system.
 I did and Irix 6.5 w g++ 2.95.3 gives the same result.
 This is fixed (assuming it's a bug  -- see above) in 3.0

 g++ 2.95 has a number of bugs that have been fixed in version 3 and above.
I don't imagine they'll be fixed.

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-03-05  6:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-27  5:31 [c++ stl] std::string bug? Gwenaël Durand
2002-03-04 22:49 ` Dylan Cuthbert
2002-02-27  7:40 Robinow, David

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).