Вероятно, в вашей реализации buffer
находится сразу ниже large_string
в стеке. Поэтому, когда вызов strcpy
переполняет buffer
, он просто записывает большую часть пути в large_string
без какого-либо особого ущерба. Он будет записывать не менее 255 байтов, но то, что он записывает больше, зависит от того, что выше large_string
(и неинициализированного значения последнего байта large_string). Кажется, он остановился перед тем, как нанести какой-либо ущерб или ущерб.
По счастливой случайности, обратный адрес вызова на function
не удаляется. Либо он находится ниже buffer
в стеке, либо в регистре, либо, может быть, функция встроена, я не могу вспомнить, что не делает оптимизация. Если вы не можете проверить разборку, я тоже не могу ;-). Итак, вы возвращаетесь и выходите без проблем.
Тот, кто сказал, что код даст ошибку, вероятно, не надежен. Это приводит к неопределенному поведению. В этом случае поведение было ничего не выводить и выход.
[Редактировать: я проверил мой компилятор (GCC на cygwin), и для этого кода он использует стандартное соглашение о вызовах x86 и код входа / выхода. И это делает segfault.]