[lldb-dev] raw c strings in lldb

Zachary Turner zturner at google.com
Wed Feb 11 14:24:29 PST 2015


On Wed Feb 11 2015 at 2:22:51 PM Zachary Turner <zturner at google.com> wrote:

> On Wed Feb 11 2015 at 2:04:38 PM Greg Clayton <gclayton at apple.com> wrote:
>
>>
>
>> But that isn't what is currently meant by _any_ of the functions that
>> take a "const char *" with no length parameter, so it means that any switch
>> to using llvm::StringRef requires we use ".str().c_str()" which I would
>> like to avoid.
>>
> I don't see why this is necessary.  Just because StringRef supports
> non-null terminated strings doesn't mean we have to use non null terminated
> strings with it.  declaring a SmallString<> and passing by SmallVectorImpl&
> supports null terminating strings.  You push_back(0) and then pop_back()
> before returning.  This is no different from what we're already doing by
> setting foo[n] = '\0' except that it's safer since there's no chance of a
> buffer overrun.
>
> We are already taking care to make sure all of our const char*s are
> properly null terminated.  Therefore when they are passed to functions that
> accept a StringRef, they will continue to be null terminated.
>

Also, if we move away from stack allocated buffers towards std::string,
then the problem is also solved for us, because std::string::c_str() always
returns a null terminated string, so creating a StringRef out of it is
fine.  StringRef is really just exactly what we already have, but with
member functions on it to automatically perform common operations.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20150211/8f7db15e/attachment.html>


More information about the lldb-dev mailing list