A string abaixo conterá o terminador nulo '\ 0'?
std::string temp = "hello whats up";
Obrigado! :)
A string abaixo conterá o terminador nulo '\ 0'?
std::string temp = "hello whats up";
Obrigado! :)
Respostas:
Não, mas se você disser, temp.c_str()um terminador nulo será incluído no retorno desse método.
Também vale a pena dizer que você pode incluir um caractere nulo em uma string como qualquer outro caractere.
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
estampas
5 5
e não 5 1como você poderia esperar se os caracteres nulos tivessem um significado especial para strings.
temp.c_str()o caractere nulo será incluído. Se você realmente precisar dele na string, basta adicioná-lo como qualquer outro caractere. temp.push_back('\0'). Agora temp.c_str()incluirá dois caracteres nulos.
Não em C ++ 03, e nem mesmo é garantido antes de C ++ 11 que em uma C ++ std :: string seja contínua na memória. Apenas strings C (matrizes de caracteres destinadas ao armazenamento de strings) tinham o terminador nulo.
No C ++ 11 e posterior, mystring.c_str()é equivalente a mystring.data()é equivalente a &mystring[0]e mystring[mystring.size()]é garantido que seja '\0'.
Isso depende da sua definição de 'conter' aqui. No
std::string temp = "hello whats up";
há algumas coisas a serem observadas:
temp.size()retornará o número de caracteres do primeiro hao último p(ambos inclusivos)temp.c_str()ou temp.data()vai voltar com um nullterminadorint(temp[temp.size()])será zeroEu sei, pareço com algumas das respostas aqui, mas quero salientar que sizede std::stringem C++é mantido separadamente e não é como em Conde você continua contando a menos que encontre o primeiro nullterminador.
Para adicionar, a história seria um pouco diferente se você string literalcontivesse incorporado \0. Nesse caso, a construção das std::stringparadas no primeiro nullcaractere, conforme segue:
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
Referências:
Sim, se você chamar temp.c_str(), ele retornará uma string C terminada em nulo.
No entanto, os dados reais armazenados no objeto tempnão podem ter terminação nula, mas não importa e não deve importar para o programador, porque quando o programador quiser const char*, ele chamaria c_str()o objeto, que é garantido para retornar nulo string terminada.
temp.size().
std::stringmantém internamente uma contagem do número de caracteres. Internamente funciona usando esta contagem. Como outros disseram, quando você precisa da string para exibição ou qualquer outro motivo, você pode c_str()usar seu método que fornecerá a string com o terminador nulo no final.