2012-04-20 1 views
2

Почти каждая другая программа или функция предназначена для копирования одного объекта на другой использует основную КонвенциюПочему зЬгсру принять это аргументы в обратном порядке

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

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

+1

Определение "общей логики". –

+9

Почему присваивания используют этот же порядок 'dst = src;'? – wildplasser

+0

... и что такое «необычная логика»! –

ответ

4

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

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

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

Другие функции C использовать этот заказ тоже.

Реализация основной зЬгсру (...) будет (пропуск отливки):

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

'memcpy (destination, source, 1 + strlen (source));' – wildplasser

+0

... вам все равно не нужны кавычки: 'memcpy() 'принимает' void * 'аргументы (один из них' const' квалифицирован), а 'void *' совместим с любым другим типом указателя. – pmg

+1

«Они хотели сопоставить синтаксис memcpy». Это приводит к следующему вопросу. Почему memcpy тоже? Этот ответ в основном говорит, что так оно и есть. –

 Смежные вопросы

  • Нет связанных вопросов^_^