строковые переменные в C ++ - PullRequest
0 голосов
/ 15 февраля 2020

ОК, я знаю, что строка - это класс в C ++. Теперь, если я объявлю экземпляр как-то вроде string str. Это массив символов, оканчивающийся только на \0 символ или что-то отличается от обычного массива символов?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

На уровне контракта это класс, который может дать вам массив символов с нулевым символом в конце, если вы хотите (методы c_str(), data()).

Начиная с C ++ 11, массив возвращаемый c_str(), а также data() гарантированно соответствует внутреннему хранилищу строки. Раньше это не требовалось стандартом, но происходило на практике.

1 голос
/ 15 февраля 2020

Массив char - это просто статическое распределение памяти в стеке с типом данных char. Тем не менее, здесь str является объектом класса std::string, который является экземпляром шаблона класса basic_string, который использует char (то есть байты) в качестве своего символьного типа.

Не используйте функции cstring или string.h, когда вы объявляете строку с ключевым словом std :: string, потому что строки std :: string имеют тип класса basic_string, а строки cstring имеют тип const char *.

Для получения дополнительной справки см. следующие ссылки: char * vs std: строка против char [] в C ++ & Разница между типами string и char [] в C ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...