Это когда появляется роль нулевого терминатора, который часто игнорируется новичками как глупый бит информации.
В C каждая строка заканчивается нулевым символом, потому что должен быть некоторый способ узнать, когда конкретная строка заканчивается, начиная с ее начального расположения в памяти. Если вы правильно инициализируете строку или вводите \0
соответствующим образом, строка может отображаться как есть. В противном случае каждый символ в памяти, начиная с нулевого индекса строки, будет отображаться, пока не встретит нулевой символ. Вот как работает printf("%s", str)
, простыми словами.
По этой причине вы получаете этот странный вывод. Это объясняет это гораздо лучше.
Решение:
Добавьте reverse_str[string_length] = '\0';
после того, как вы перевернули строку, используя это для l oop, поэтому что ваша результирующая строка правильно завершена нулем.
Бонус:
И причина, по которой вы получили значительно вменяемый вывод, заключается в том, что вам повезло, так как компилятор выделил str
и reverse_str
приближаются друг к другу в таком направлении, что даже если вы пропустите нулевой терминатор на reverse_str
, вы попадете на нулевой терминатор str
.