Вы ничего не копируете в str
.Вы просто редактируете значение указателя, которое вы передали в ...
Вызов foo(str)
создает новую временную переменную с именем void* val
и указывает на char[0]
.Затем вы изменяете val
так, чтобы он указывал на начало строки "Длинная строка".
Если вы действительно хотите заполнить буфер char str[25]
, используйте strncpy:
int foo (char* buf)
{ return strncpy (buf, "Long String", 25); }
Однако, если вы когда-либо отправите эту подпрограмму char[]
с менее чем 25 позициями, у вас будут серьезные проблемы.
Я также хотел бы такжепредположить, вопреки некоторым только что появившимся предложениям, strcpy
никогда не следует рассматривать для использования в новом коде, а определенно не рекомендуется тем, кто учится работать с указателями и символамимассивы.Так лежит боль.