Вопрос: Что это делает пока l oop с этим конкретным условием? - PullRequest
1 голос
/ 06 марта 2020
char *strcpypp(char *dest, char *orig)
{
   char *tmp = dest;
   while (*dest++ = *orig++)
      ;

return tmp;
}

Что на самом деле делает эта функция?

1 Ответ

1 голос
/ 06 марта 2020

Для начала функция должна быть объявлена ​​как

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 оценивает в ложь, потому что значение всего выражения равно нулю.

...