2012-04-20 1 views
2

Presque tous les autres programmes ou fonction conçu pour copier un objet dans un autre utilise la convention de basePourquoi strcpy prendre c'est des arguments dans l'ordre inverse

copie (source, destination)

logique même commune conduirait à la conclusion que vous copiez quelque chose d'ici à là. Pourquoi strcpy utilise-t-il exactement la convention inverse? Cela sert seulement à confondre les gens qui essaient d'utiliser la fonction. Sûrement l'auteur de Strcpy pensait à cela pendant qu'il écrivait la fonction? Ou est-ce que la fonction strcpy est antérieure à cette convention d'utilisation maintenant omniprésente?

+1

Define "logique commune". –

+9

Pourquoi les affectations utilisent-elles le même ordre 'dst = src;'? – wildplasser

+0

... et qu'est-ce qu'une "logique rare"! –

Répondre

4

Ils voulaient correspondre à la syntaxe de memcpy.

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

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

Autres fonctions C utilisent cet ordre aussi.

A strcpy de base (...) la mise en œuvre serait (sauter les pièces):

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

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

+0

... vous n'auriez pas besoin de conversions de toute façon: 'memcpy() 'prend' void * 'arguments (l'un d'eux' const' qualifié), et 'void *' est compatible avec tout autre type de pointeur. – pmg

+1

"Ils voulaient correspondre à la syntaxe de memcpy." Ce qui conduit à la question suivante. Pourquoi Memcpy est-ce aussi? Cette réponse dit essentiellement, c'est ainsi parce que c'est. –

Questions connexes