REPROGRAMMER STRLEN ET STRCPY

FloZix Messages postés 42 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 24 juin 2008 - 22 janv. 2003 à 10:09
KissyFroth Messages postés 38 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 7 avril 2007 - 8 déc. 2005 à 23:57
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/10308-reprogrammer-strlen-et-strcpy

KissyFroth Messages postés 38 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 7 avril 2007
8 déc. 2005 à 23:57
Un tres grand merci à cette source : il y a parfois des petits détails sur lesquels on bute et qui vous empechent d'avancer : perso ca fai 1 heure que je cherche le caractere d'arret qui est donc '\0'. Maintenant je le saurais. Merci encore.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2003 à 14:35
Salut,
pour myStrlen() le count ne sert à rien.
int myStrlen(const char *p)
{
char *c = p;
while(*c) c++;
return (c - p);
}
pour myStrcpy() tu peux faire idem.
Il faut toujours regarder la sortie ASM produite par le compilateur.
ciao...
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
24 janv. 2003 à 11:26
Reponse a Kikyo:
Ta methode marche... mais elle est + lentec (d'apres mes testes),
car faire une difference d'adresse (= de pointeur) prend enormement
de temps ... il faut diviser par le taille du type i.e. sizeof(char).
Peut-etre que ta methode est la meilleur pour un texte tres long...
cs_Azar Messages postés 9 Date d'inscription lundi 20 mai 2002 Statut Membre Dernière intervention 27 septembre 2003
23 janv. 2003 à 20:43
pour strcpy tu pourrais aussi faire :
void myStrcpy(char* str1, char* str2){
while(*str1++=*str2++);
}
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
23 janv. 2003 à 12:31
juste pour dire que le " est le caractère d'arret (\0)
Mais il est pas passé quand je l'ai ecrit.
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
23 janv. 2003 à 12:30
Je suis d'accord avec vous pour la fonction <myStrlen>,
mais pas pour la fonction <myStrcpy> car il faut copier le '' a
chaque fois.(j'aurais pu le faire en dehors de la boucle ...)
Et pour information je ne pense pas que un
dans un
soit tres mechant car parfois cela est tres utile ...
FloZix Messages postés 42 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 24 juin 2008
22 janv. 2003 à 22:41
c'est pas vraiment mechant de mettre un break mais c'est une maniere un peu violente de sortir de la boucle... quand on peu eviter c'est mieux. le break c'est surtout utilie dans un switch sinon ya souvent moyen d'eviter...
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
22 janv. 2003 à 16:09
Moi je suis largement de l"avis de FloZix, c'est à dire faire un
while(*pScr!='')
{
cs_Kikyo Messages postés 10 Date d'inscription samedi 28 octobre 2000 Statut Membre Dernière intervention 25 juin 2003
22 janv. 2003 à 14:27
FloZix le "break" est dans le if(...) mais agit sur la boucle "do...while"... enfin je sais pas si c grave mais moi je vois pas où c méchant ^^

Sinon pour le myStrlen(...) ce cerait pas mieux de copier l'adresse du pointeur *p dans un autre pointeur *p2 au début de la fonction ainsi pour retourner le nombre de charatères il sefit de retourner (p - p2) ainsi celà évite d'incrémenter count... celà me parait plus optimiser non ?
FloZix Messages postés 42 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 24 juin 2008
22 janv. 2003 à 10:09
utiliser un break dans le if c'est bofff... c'était plus simple de mettre la condition dans le while et du coup eviter le break. Enfin il me semble.
Rejoignez-nous