Если вас интересует, что «могло произойти» под капотом, учтите, что sabonete
на вашей платформе имеет ширину 4 байта (в качестве указателя), и поскольку ваш main не объявлял параметры (что ОС пусть в любом случае доступно), может занимать то же пространство памяти, что обычно в обратном порядке параметра.
Это правда, он перезаписывает char ** argv, который указывает на массив указателей (он должен содержать как минимум 16 из них), который указывает на строки, содержащие части командной строки.
Вы фактически присваиваете свои значения, записывая их в этот массив, и, поскольку они принадлежат вашей программе, ОС не жалуется. А поскольку вы никогда не ссылаетесь на его исходные значения, и никто больше не меняет их, все выглядит нормально.
Но это не потому, что это нормально. Это потому, что вам повезло найти подходящее место для чего-то другого, что вас в этом случае не интересует.