Почему strcpy принимает аргументы в обратном порядке [закрыто]


Почти каждая другая программа или функция, предназначенная для копирования одного объекта в другой, использует базовое соглашение

Копия (источник, назначение)

Даже обычная логика привела бы к выводу, что вы копируете что-то отсюда туда. Почему strcpy использует прямо противоположное соглашение? Это только запутывает людей, пытающихся использовать эту функцию. Наверняка автор strcpy думал об этом, когда писал функцию? Или функция strcpy появилась раньше это теперь-повсеместное соглашение об использовании?

1 2

1 ответ:

Они хотели соответствовать синтаксису memcpy.

char * strcpy ( char * destination, const char * source );

void * memcpy ( void * destination, const void * source, size_t num );

Этот порядок используют и другие C-функции.

A basic strcpy(...) реализация будет (пропуск отливок):

char * strcpy ( char * destination, const char * source ) {
    return memcpy(destination, source, strlen(source) + 1);
}