Что происходит с нулевым символом, когда строка переворачивается с помощью обратного цикла

Я новичок со строками в C ++. Я просто запутался с работой приведенного ниже кода (используется для перестановки строки).

std:: string    rev;

for(int i=  str.size()-1;   i>=0;   --i)
{
rev.push_back(str[i]);
}

std:: cout<<"   Reversed=   "<<rev<<endl;

Проблема в том, что последний символ строки является нулевым символом '\0', Таким образом, когда цикл выполняется для первой итерации, он должен помещать нулевой символ в начале rev и еще одна вещь, здесь строка rev не может быть нулевым, прекращено, потому что '\0' не назначается последним символом строки.

Но когда я запускаю Программу, она работает нормально. Я знаю, что ошибаюсь, думая обо всем этом. Кто-нибудь может объяснить работу, пожалуйста? Я буду рад и благодарен вам 🙂

1

Решение

Терминатор null фактически не считается частью std::string, Это входит в игру только когда вы звоните c_str(), Так size() а также length() не включать терминатор. И на самом деле вы можете положить нулевые символы в середине std::string и все будет работать, кроме c_str() (если ваша строка может содержать нули, вы должны использовать data() а также size()).

4

Другие решения

Оператор ‘/ 0’ добавляется автоматически, так что вы выполняете цикл только до символа непосредственно перед ‘/ 0’. Это всегда там, так что вы не видите никаких изменений.

1

По вопросам рекламы [email protected]