De l'inutilité de la valeur de retour de strcat/strcpy - C - Programmation
Marsh Posté le 05-11-2003 à 04:13:39
En fait je viens de voir que la glibc propose la fonction non « standards » stpcpy(), qui fait exactement ça.
La question devient donc : y-a-t'il une raison particulière au choix de POSIX et de l'ISO ? Est-ce que le gars qui a crée strcpy() a réfléchi deux minutes avant de choisir la valeur de retour de sa fonction ? Et pouquoi ne fait-on pas entrer stpcpy() dans les standards POSIX et ISO ?
Marsh Posté le 05-11-2003 à 10:13:15
pour pouvoir faire ca :
strcat(strcat(strcat(roger,poupou),josianne),milou);
Marsh Posté le 05-11-2003 à 12:27:19
chrisbk a écrit : pour pouvoir faire ca : |
On se croirait en scheme
Marsh Posté le 05-11-2003 à 13:40:03
Yep, la chaîne est réutilisable aussitôt :
puts(strcat(...)); par exemple
Le pointeur sur le 0 final est obtenu simplement par :
chaine + strlen(chaine)
dans le cas où est chaine est un char* pointant sur une chaine valide.
Marsh Posté le 05-11-2003 à 13:48:49
Vinx a écrit : Yep, la chaîne est réutilisable aussitôt : |
strlen implique alors une seconde itération des caractères de la chaine, ce qui n'est vraiment pas négligeable dnas certains cas.
Marsh Posté le 06-11-2003 à 03:42:43
Oui tout a fait. Et sinon le coup de « réutiliser tout de suite le résultat » ça sert juste à condenser deux lignes en une, c'est à dire à rien.
Je continue de penser qu'on devrait pendre l'inventeur des strcat et strdup, pour avoir condamné les générations passée et futures à utiliser d'infâmes contournements
Marsh Posté le 05-11-2003 à 03:55:35
Il y a une question que je me pose depuis longtemps : à quoi sert la valeur de retour de strcat() et strcpy() ?
Comme vous le savez certainement une « erreur de style » fréquente est d'utiliser une série de strcat() pour construire une chaine. C'est particulièrement inefficace puisque strcat() commence par chercher le '\0' final de la chaine de destination. Par exemple dans
on va chercher 2 fois le '\0' final d'un dst qui est de plus en plus grand.
Si strcat() et strcpy() renvoyaient un pointeur vers le '\0' final, alors ce serait super simple de faire efficace :
Donc la question est : mais pourquoi strcat() et strdup() renvoient un pointeur vers la chaine de destination ? C'est complètement inutile, et en plus je la connais puisque je l'ai passée en argument...
Message édité par matafan le 05-11-2003 à 04:06:24