From: Rob Stewart (stewart_at_[hidden])
Date: 2004-05-10 14:00:13
From: John Nagle <nagle_at_[hidden]>
> STL strings are variable-sized, with no limit. When you
> add characters, "size()" increases. Should fixed-size
I presume you're referring to fixed-capacity strings which can
have a variable size, right?
> strings be similar? If the STL string operations are
> to be meaningful, they have to be.
Only if you want to apply mutating algorithms that modify size.
IOW, it isn't unreasonable to choose either fixed-size or
fixed-capacity strings. If the former, then there are no
mutating algorithms that affect the size. If the latter, the
size can change, but an exception occurs when trying to exceed
> In STL strings, "size" doesn't include a trailing null.
> Using "c_str" can result in expanding the string to add a
> trailing null. With fixed-size strings, we don't have that
> If c_str is provided, there must always be space
> for a trailing null. So you can't use char_string
> when you need a specific fixed length, as for Macintosh
> 4-character file signatures. Perhaps "boost::array<char>"
> is the way to go for that sort of thing. Trying to do
> both null-terminated and non-null-terminated strings
> in the same class will get ugly.
If the string if fixed-capacity *and* there remains sufficient
capacity, c_str() can null terminate the buffer. If there isn't
sufficient remaining capacity, then throw an exception.
IOW, make it a runtime error to fix the capacity too small to
permit null termination when calling c_str(). That still leaves
room for things like the 4-character file signature to which you
referred, and yet prevents buffer overrun, but doesn't require
-- Rob Stewart stewart_at_[hidden] Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk