REPLACE(CHAR *, ...); UN REPLACE STYLE MIRC

Messages postés
409
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
- - Dernière réponse : NitRic
Messages postés
409
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
- 24 mars 2005 à 05:40
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/30230-replace-char-un-replace-style-mirc

Afficher la suite 
NitRic
Messages postés
409
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
Excellent, de plus, sans `goto`, c'est parfait(enfin presque), ca vaut bien une petite note :}(même si je l'ai pas essayé =P)
NitRic
Messages postés
409
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
Je viens de remarquer un petit quelque chose, ta fonction ToLower() n'est pas fonctionnelle ...

Tu devrais vérifier si c'est une majuscule et si c'est le cas, alors renvoyer l'équivalent minuscule car pour tous les caractères non `alpha`, ta fonction va retourner n'importe quoi ... Pour un chiffre, elle va retourner un caractère quelconque, par exemple ...

C'est bien, tu démontre seulement le fonctionnement de certaines fonctions standards, il n'y à aucun problème, cependant, elles ne sont pas fonctionnelles tes fonctions, c'est _ca_ le problème ... Tu devrais les repenser/corriger/tester/... et ensuite, je n'aurais plus rien à dire :}

J'ai remarqué autre chose, tu as modifié ton code pour utiliser les macros standards(portables :}), va_list, va_start, etc ... c'est excellent !!!

Au fait, pour en démontrer leurs fonctionnement, de petit commentaire pourait aider les débutants/initiés à mieux comprendre sinon, ton but de vouloir en démontrer leurs fonctionnement est inutile ...


Voilà, c'est tout :}

@++;



~(.:: NitRic ::.)~
Djoobstil
Messages postés
38
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
22 mars 2005
-
Ah oui au passage... Thaeron, qu'est-ce qui est ``moin portable" dans mes fonctions ?
Djoobstil
Messages postés
38
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
22 mars 2005
-
"Ta fonction (replace) utilise le tableau statique d'entrée ce qui entraine un joli segmentation fault quand la taille totale des remplacements dépasse la taille de la chaîne (l'exemple que tu as mis dans la description l'illustre parfaitement)."

La taille total du tableau est défini par REPLACE_SAVE_LEN et non REPLACE_MAX, donc pas de ``segmentation fault", sauf si tu dépasses les 1024, dans lequel cas tu peux incrémenter la valeur...

REPLACE_MAX n'est que le nombre d'arguments passés à la fonction
``replace("..", "1", "1", "2", "2", "3", "3", "4", "4", "5", "5", ..., 0);

Pour les fonctions, je répète... je les ai faites pour montrer comment elles marchent... Si vous voulez les fonctions POSIX, vous n'avez qu'a enlever les "__" devant les fonctions.
NitRic
Messages postés
409
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
Je ne veux pas lancer de débat mais, c'est faux, elles ne sont pas `utilisées` souvent. Quand j'ai employé le mot souvent, je voulais dire _très_ souvent, ici dans un `replace()`, elles seront appelées que quelques fois, je pourais presque avoir assez de doigts pour les compter :}

Ton fameux `__strlen()` serait plus rapide sans le `i++` dans le while() car tu `force` le compilateur à vérifier à chaque tour la valeur de `i` ce qui est inutile et de plus, ta boucle ne fait qu'un seul et unique tour, pourquoi?

int i = 0;
while ( *a++ && i++ );

je sais pas si tu le sais mais, le i++ est interprété de cette facon:

while ( *a++ && i )
{
i = i + 1;
}

ce qui aurat comme effet d'entrer dans la boucle une fois et d'en sortie immédiatement, utilise plutôt ++i


size_t __strlen( const char * string )
{
const char * eos = string;
while ( *eos )
++eos;
return (eos - string);
}

Je veux bien croire que le type `int` est utilisé par défaut bien souvent mais tu devrais prendre l'habitude de le mettre ...


Au fait, <windows.h> n'inclus pas <stdio.h>, <stdlib.h> et compagnie, à moin d'avis contraire mais j'en suis quasi-certain ...

Au fait, on ne parle pas de nano-sec, ce n'est pas aussi rapide, car les chaines ne sont pas toujours de 10-20 caractères, on à souvent de longues chaines, ce qui pourait être domage de passer à coté de `strlen()`(version STD/ANSI) ...

Thaeron à raison, tu devrais faire quelque chose d'un peu plus `dynamique` avec malloc()/free(), ca serait encore mieux mais surtout plus `safe`

Il ne faut pas prendre tout ce que je dis de façon négative mais plutôt positive, `critiques constructives` !? :}


Sur ce, bye bye && bonne prog :}

@++;





~(.:: NitRic ::.)~