FONCTION : CHAR * AJUSTERTAILLECHAINE()

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 12 mars 2010 à 13:49
cs_Yuzuru Messages postés 4 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 18 mars 2010 - 18 mars 2010 à 17:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51432-fonction-char-ajustertaillechaine

cs_Yuzuru Messages postés 4 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 18 mars 2010
18 mars 2010 à 17:41
le strcpy insère bien '\0'. Je ne fais que retirer le doute de uaip. Sinon je ne vois pas ce qui y a dire de plus que les précédents.

Yuzu
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
13 mars 2010 à 11:17
C'est pas faux. Pour se faire, Il peut utiliser return strdup(Chaine);
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
13 mars 2010 à 03:55
Hello,

Que fait le client de ta fonction quant à la chaine retournée ? Logiquement, il se doit de faire un free dessus, non ? Or si tu renvois la chaine passée en paramètre comme lorsque tu fais :
if(NDeplacement==0){return Chaine;}
ton client va faire un free de sa propre chaine.
Ça va pas bien se passer :
* soit un double free
* soit un free d'une chaine constante

Il faut que le comportement de ta fonction soit identique quel que soit les arguments. C'est à dire : allouer une chaine dans tous les cas.
Tib.
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
12 mars 2010 à 13:49
Salut,
J'ai regardé le code en speed...

if ((Chaine[0]=='\0')||(PositionAjustement<0))
{
return Chaine;
}
if (NDeplacement==0)
{
return Chaine;
}
devient
if ((Chaine[0]=='\0') || (PositionAjustement<0) || (NDeplacement==0)) return Chaine;

if (NDeplacement<0) ...
if (NDeplacement>0) ...
devient
if (NDeplacement<0) ...
else ...
(puisque NDeplacement != 0 dès le départ)

sizeof(char) = 1, si je dis pas de connerie, sous n'importe quel OS
Et tu oublies le +1 dans le malloc, non ?
Et je ne sais plus si strcpy insère le '\0'.

Bref, je dois y aller, bonne continuation.