Вы можете поблагодарить своего любимого божества за то, что этот отказоустойчивый, большинство функций не такие.
В C строки имеют нулевое завершение, что означает, что они принимают дополнительный символ, чем фактические данные, чтобы отметить, где фактически заканчивается строка.
Поскольку вы все равно используете C++, вам следует избегать массивов char-bare-bones. Некоторые причины:
- переполнение буфера. Вам удалась эта проблема с первой попытки, подскажите!
- Unicode осведомленность. Мы живем в 2015 году. Все еще использование 256 символов недопустимо по любому стандарту.
- память безопасность. Это труднее протекать надлежащим
string
, чем простой старый массив. string
s имеют сильную семантику копирования, которая охватывает почти все, что вы можете придумать.
- простота использования. У вас есть весь список алгоритмов STL в вашем распоряжении! Используйте его, а не сворачивайте свой собственный.
*** Определенная длина - 3 символа, так почему же она захватывает только 2 символа? *** Вам нужен дополнительный символ для нулевого терминатора. – drescherjm
Спасибо! Если вы опубликуете это как ответ, я соглашусь с ним. – m0meni
Если вы новичок в C++, не используйте теперь странные причуды, такие как строки стиля C. Используйте 'std :: string', который просто работает так, как вы ожидаете, а затем узнайте, как это работает, когда вы готовы противостоять истинному безумию. –