Завершено ли std :: string символом '/ 0'? [Дубликат]

0
char *pt = "hello";
std::string str = "hello";

str также заканчивается символом '/0' (завершается нулем)?

  • 0
    может быть? str.data() выдаст вам строку c с нулевым символом в str.data() , кроме того, что вам все равно.
  • 5
    Этот вопрос не совсем понятен как есть. std::string является ни массивом, ни указателем, это класс. Как бы вы определили, чем это «заканчивается»?
Показать ещё 2 комментария
Теги:

3 ответа

3

Определяется реализация, независимо от того, завершена ли std::string.

Фактическое содержимое str после его определения:

std::string str = "hello";

являются символами 'h', 'e', 'l', 'l', 'o' а его size равен только 5 символам.

  • 0
    Хотя это действительно так, стандарт также требует, чтобы базовая контролируемая последовательность заканчивалась нулем при доступе к ней через функции- c_str , data или operator[] .
  • 0
    Вы уверены, что str не заканчивается на '\ o'
2

Буфер, обработанный str может быть нулевым, но необязательно.

  • 2
    На самом деле, как я считаю, C ++ (11?) Требует, чтобы &str[0] указывал на str.c_str() .
  • 1
    @ H2CO3 Это действительно так в C ++ 11. Не так много с предыдущими версиями, однако.
0

str.c_str() предоставит вам str.c_str() const char*, которая указала на непрерывный непрерывный буфер (например, ваш литерал "hello").

Но имейте в виду использование &str[0] потому что это не гарантирует, что это указывает на непрерывный буфер, ни на то, что этот буфер заканчивается на нуль.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню