char *pt = "hello";
std::string str = "hello";
str
также заканчивается символом '/0'
(завершается нулем)?
Определяется реализация, независимо от того, завершена ли std::string
.
Фактическое содержимое str
после его определения:
std::string str = "hello";
являются символами 'h'
, 'e'
, 'l'
, 'l'
, 'o'
а его size
равен только 5 символам.
c_str
, data
или operator[]
.
Буфер, обработанный str
может быть нулевым, но необязательно.
&str[0]
указывал на str.c_str()
.
str.c_str()
предоставит вам str.c_str()
const char*
, которая указала на непрерывный непрерывный буфер (например, ваш литерал "hello"
).
Но имейте в виду использование &str[0]
потому что это не гарантирует, что это указывает на непрерывный буфер, ни на то, что этот буфер заканчивается на нуль.
str.data()
выдаст вам строку c с нулевым символом вstr.data()
, кроме того, что вам все равно.std::string
является ни массивом, ни указателем, это класс. Как бы вы определили, чем это «заканчивается»?