Mam problem, w którym rozmiar ciągu znaków jest wykonywany z obecnością znaku '\0'
. Przeszukałem wszystko w SO i nie mogłem uzyskać odpowiedzi.Dlaczego rozmiar tego std :: string zmienia się, gdy znaki są zmieniane?
Oto fragment kodu.
int main()
{
std::string a = "123123\0shai\0";
std::cout << a.length();
}
Wyjście w tym przypadku jest
6
Gdzie jak tego samego programu na inny ciąg mający cyframi zamiast znaków
int main()
{
std::string a = "123123\0123\0";
std::cout << a.length();
}
daje moc
8
Co dokładnie dzieje się pod maską? W jaki sposób obecność postaci '\0'
zmienia zachowanie?
Nie umieszczaj znaków null (\ 0) w łańcuchach, chyba że masz bardzo dobry pomysł, co robisz i dlaczego! – pjc50
A jeśli naprawdę potrzebujesz łańcuchów zakończonych znakiem null, będziesz chciał użyć 'std :: literals :: string_literals :: operator" "s' (C++ 14) lub' std :: string (char * , size_t) '(pamiętaj, aby dołączyć ostateczną wartość zerową, jeśli chcesz). –
Zauważ, że twój drugi ciąg zastępuje "shai" (cztery znaki) za pomocą "123" (trzy znaki), więc byłaby różnica nawet bez sekwencji ósemkowej wspomnianej w zaakceptowanej odpowiedzi. –