Что означает "\ 0"?

Я не могу понять, что означает "\ 0" в двух разных местах в следующем коде:

string x = "hhhdef\n";
cout << x << endl;
x[3]='\0';
cout << x << endl;
cout<<"hhh\0defef\n"<<endl;

Результат:

hhhdef

hhhef

HHH

Может ли кто-нибудь дать мне несколько указателей?

Ответ 1

С++ std::string являются "подсчитанными" строками, т.е. их длина сохраняется как целое число, и они могут содержать любой символ. Когда вы заменяете третьего символа символом \0, ничего особенного не происходит - оно печатается так, как будто это был любой другой символ (в частности, ваша консоль просто игнорирует его).

В последней строке вместо этого вы печатаете строку C, конец которой определяется первым \0, который найден. В таком случае cout продолжает печатать символы, пока не найдет \0, который в вашем случае будет после третьего h.

Ответ 2

С++ имеет два типа строк:

Встроенные строки с нулевым завершением в стиле C, которые на самом деле представляют собой только байт-массивы и класс стандартной библиотеки С++ std::string, который не завершен нулем.

Печать строки с нулевым завершением печатает все до первого нулевого символа. Печать std::string печатает всю строку, независимо от нулевых символов в ее середине.

Ответ 3

\0 является символом NULL, вы можете найти его в своем ASCII table, он имеет значение 0.

Используется для определения конца строк в стиле C.

Однако класс С++ std::string сохраняет свой размер как целое число и, следовательно, не полагается на него.

Ответ 4

Здесь вы представляете строки двумя разными способами, поэтому поведение отличается.

Второй легче объяснить; это исходный массив char в стиле C. В строке стиля C '\0' обозначает нулевой ограничитель; он использовал для обозначения конца строки. Таким образом, любые функции, которые обрабатывают/отображают строки, останавливаются, как только они ударяют его (вот почему ваша последняя строка усечена).

Первый пример - создание полностью сформированного объекта С++ std::string. Они не придают особого значения '\0' (у них нет нулевых терминаторов).