Для начала функция должна быть объявлена как
char *strcpypp(char *dest, const char *orig);
, поскольку строка, на которую указывает указатель orig
, не изменяется в функции.
Переменная tmp должна быть объявлено в a для l oop.
Таким образом, функция будет выглядеть следующим образом:
char * strcpypp( char *dest, const char *orig )
{
for ( char *tmp = dest; *tmp++ = *orig++; );
return dest;
}
Функция копирует строку, на которую указывает указатель orig, в массив символов, на который указывает указатель dest.
Значение этого выражения
*tmp++ = *orig++
- это значение, присвоенное символу, на который указывает указатель tmp, перед приращением самих указателей tmp
и orig
.
Таким образом, если присваивающий символ является завершающим нулевым символом '\ 0' строки, на которую указывает указатель orig, тогда он присваивается символу, на который указывает указатель tmp, и условие l oop оценивает в ложь, потому что значение всего выражения равно нулю.