Ilsundal
Messages postés79Date d'inscriptionlundi 23 décembre 2002StatutMembreDernière intervention 1 mars 2011
-
20 avril 2009 à 14:26
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
21 avril 2009 à 19:44
Bonjour a tous,
je viens de recoder strcmp(char *, char *) en ASM, mais je me suis rendu compte que si les param sont en dur ou si c'est issu de chaine malloc, les resulta ne sont pas les meme :
ex : strcmp("coucou", "Aouou") renvoie -1
mais :
char *txt, txt2
txt = malloc(sizeof(*txt) * 20);
txt2 = malloc(sizeof(*txt2) * 20);
strcpy(txt, "coucouc");
strcpy(txt2,"Aouou");
strcmp(txt, txt2) renvoie la difference en code ASCII du caractere qui differe, ici il fait une soustraction entre 'c; et 'A'
Comment savoir sle param est issu d'une chaine en dur ou d'un malloc ??
Merci
____________________
Ma Quete n'est pas Terminee
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 21 avril 2009 à 19:27
_strcmp:
mov edi, [esp + 4] ; ARGU. 1 DANS EDI (CHAR * DESTINATION)
mov esi, [esp + 8] ; ARGU. 2 DANS ESI (CHAR * SOURCE)
_loop:
cmp edi, esi ; COMPARE EDI ET ESI : Whouhouuu !
jne _not
C'est pas les memes adresses alors pas les memes chaines ???
Mais c'est nimporte quoi !!!
Ce qui est à comparer, ce sont les chaines qui démarrent aux 2 adresses.
Allez hop tu te remets au boulot en réfléchissant à ce que j'ai dit à la ligne au dessus.
Fais voir l'effort produit et on corrigera si besoin.