1
в таблице ASCII - непечатаемый символ (начало заголовка - SOH). При его печати ваша программа просто пропустит их (ну, вероятно, ASCII не гарантируется ни в одной программе C ++).
что происходит в памяти?
В памяти у вас все еще есть эти 1
в каждом месте.
Это выглядит так:
1 119 111 1 114 108 1 1 100 0 // decimal values, assuming ASCII
SOH w o SOH r l SOH SOH d NUL // char representations
Это действительно хорошее решение?
Не совсем. char 1
может печататься по-разному в некоторых системах. strlen()
вернет всю длину строки, включая эти символы SOH, а не количество напечатанных символов (что можно ожидать). Итерация по этой строке даст странные значения. В целом, работа с этой строкой позже будет беспорядком.
Пока это работает, но вам, вероятно, следует действительно удалить символы вместо того, чтобы просто заменить их непечатаемыми.