Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1012 connectés 

  FORUM HardWare.fr
  Programmation
  C

  De l'inutilité de la valeur de retour de strcat/strcpy

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

De l'inutilité de la valeur de retour de strcat/strcpy

n°559243
matafan
Posté le 05-11-2003 à 03:55:35  profilanswer
 

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

Code :
  1. strcpy(dst, machin);
  2. strcat(dst, " est un " );
  3. strcat(dst, machin);

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 :

Code :
  1. end = strcpy(dst, machin);
  2. end = strcpy(end, " est un " );
  3. end = strcpy(end, machin);


 
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
mood
Publicité
Posté le 05-11-2003 à 03:55:35  profilanswer
 

n°559244
matafan
Posté le 05-11-2003 à 04:13:39  profilanswer
 

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 ?

n°559357
chrisbk
-
Posté le 05-11-2003 à 10:13:15  profilanswer
 

pour pouvoir faire ca :
strcat(strcat(strcat(roger,poupou),josianne),milou);


Message édité par chrisbk le 05-11-2003 à 12:28:11
n°559517
antsite
Je me souviens
Posté le 05-11-2003 à 12:27:19  profilanswer
 

chrisbk a écrit :

pour pouvoir faire ca :
strcat(strcat(strcat(roger,poupou)));
 


 
On se croirait en scheme :D

n°559606
Vinx
Posté le 05-11-2003 à 13:40:03  profilanswer
 

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.


---------------
Slack powa | http://www.racingpneu.com
n°559622
El_gringo
Posté le 05-11-2003 à 13:48:49  profilanswer
 

Vinx a écrit :

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.


 
strlen implique alors une seconde itération des caractères de la chaine, ce qui n'est vraiment pas négligeable dnas certains cas.

n°560514
matafan
Posté le 06-11-2003 à 03:42:43  profilanswer
 

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 :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  De l'inutilité de la valeur de retour de strcat/strcpy

 

Sujets relatifs
[VB.NET] pointer la valeur de inputbox vers comboboxbig problème de retour à la ligne
Transmettre une valeur d'un fichier à un autre ?récup d'un valeur de formulaire ( ! liste) en php
ASP.net et valeur des paramètres d'un POSTdebutant [Borland c++ buider] Comment recuper la valeur d'un Edit ?
Oracle + valeur[JAVA] Intercepter le retour d'un prog lancé en ligne de commande
Programme : charger la valeur de l'adresse...Curseur et retour a la ligne
Plus de sujets relatifs à : De l'inutilité de la valeur de retour de strcat/strcpy


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR