Мое лучшее предположение состоит в том, что two
и one
находятся в стеке рядом друг с другом следующим образом:
t w o - - o n e - - -
--------------------------------------------
| | | | | | h | e | l | l | o | \0 |
--------------------------------------------
Поскольку вы переполняете буфер two
, передавая размер 6copy2
когда two
имеет размер 5, память будет выглядеть следующим образом:
t w o - - o n e - - -
--------------------------------------------
| h | e | l | l | o | \0 | e | l | l | o | \0 |
--------------------------------------------
Именно поэтому two
, кажется, содержит «привет», а one
ничего не показывает (так как два переопределенияего буфер и теперь нулевой терминатор является первым символом в one
).