Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2022-05-13 22:19:33


Marshall Clow wrote:
> On May 13, 2022, at 12:29 PM, Rainer Deyke via Boost
> <boost_at_[hidden]> wrote:
> >
> > On 13.05.22 20:39, Marshall Clow via Boost wrote:
> >> On May 13, 2022, at 11:18 AM, Peter Dimov via Boost
> <boost_at_[hidden]> wrote:
> >>> In what scenarios will it not give you a null-terminated string?
> >> char arr[6] = “hello";
> >> cstring_view csv(arr);
> >> assert(strlen(csv.data())) == 5);
> >> arr[5] = ‘!’;
> >> assert(strlen(csv.data())) == 5); // boom — Marshall PS. It
> >> promises to give you a null-terminated string, but has no way to actually
> guarantee that.
> >
> > That's an issue with views in general, not just cstring_view.
> >
> > std::string s = "hello";
> > string_view sv = s;
> > assert(sv.size() == 5);
> > s += "!";
> > assert(sv.size() == 5); // boom
>
> I don’t see the problem here (and when I run the code I get no error - after
> adding the missing ’std::').
>
> No assertion failure; no undefined behavior (unlike the cstring_view example)

Only because "hello!" fits into the small buffer, I suspect. If `s` reallocates,
`sv` would be left dangling.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk