Будет ли строка ниже содержать нулевой ограничитель '\ 0'?
std::string temp = "hello whats up";
Спасибо!:)
Будет ли строка ниже содержать нулевой ограничитель '\ 0'?
std::string temp = "hello whats up";
Спасибо!:)
Нет, но если вы скажете temp.c_str(), то в результате возврата этого метода будет включен нулевой ограничитель.
Также стоит сказать, что вы можете включить нулевой символ в строку, как и любой другой символ.
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
печатает
5 5
а не 5 1, как вы могли бы ожидать, если для строк были использованы специальные символы.
Не в С++ 03, и он даже не гарантирован до С++ 11, что в С++ std::string непрерывна в памяти. Только C строк (char массивы, предназначенные для хранения строк) имели нулевой ограничитель.
В С++ 11 и более поздних версиях mystring.c_str() эквивалентен mystring.data() эквивалентен &mystring[0], а mystring[mystring.size()] гарантированно '\0'.
Да, если вы вызываете temp.c_str(), тогда он вернет c-строку с нулевым завершением.
Однако фактические данные, хранящиеся в объекте temp, могут не заканчиваться на нуль, но это не имеет значения и не имеет значения для программиста, потому что когда тогда программист хочет const char*, он будет называть c_str() на объекте, который гарантированно возвращает строку с нулевым завершением.
С С++-строками вам не нужно беспокоиться об этом и, возможно, зависит от реализации.
Используя temp.c_str(), вы получите представление C строки, которая определенно будет содержать \0 char. Кроме этого, я действительно не вижу, как это было бы полезно для строки С++
std::string внутренне сохраняет количество символов. Внутри он работает, используя этот счет. Как говорили другие, когда вам нужна строка для отображения или по какой-либо причине, вы можете использовать ее метод c_str(), который даст вам строку с нулевым терминатором в конце.
Это зависит от вашего определения "содержать" здесь. В
std::string temp = "hello whats up";
есть несколько замечаний:
temp.size() вернет число символов с первого h до последнего ptemp.c_str() или temp.data() вернется с терминатором nullint(temp[temp.size()]) будет нольЯ знаю, что я похож на некоторые из ответов здесь, но хочу отметить, что size of std::string в C++ поддерживается отдельно и не похож на в C, где вы держите подсчет, если не найдете первого терминатора null.
Чтобы добавить, история немного изменится, если ваш string literal содержит встроенный \0. В этом случае конструкция std::string останавливается сначала символом null, как показано ниже:
std::string s1 = "ab\0\0cd"; // s1 contains "ab", using string literal
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd", using different ctr
std::string s3 = "ab\0\0cd"s; // s3 contains "ab\0\0cd", using ""s operator
Ссылки: