Xor avec char *

Fermé
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 - 11 août 2014 à 14:43
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 11 août 2014 à 18:02
Bonjour à tous,

J'essaie de coder un fonction qui permet de calculer le Xor entre les bits d'une chaîne de caractères, j'ai créé la fonction suivante mais qui marche pas :

void xor_str(char *r, char *s1, char *s2, int l){
int i;
for(i = 0; i < l; i++)
r[i] = s1[i]^s2[i];
}

int main(){
char *s1 = "salut";
char *s2 = "totot";
char *r;
xor_str(r, s1, s2, 5);
printf("%s \n", r);
return 0;
}

Merci pour votre aide, sachant que je suis obliger d'utiliser les pointeurs au lieux de tableau de caractères.

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 11/08/2014 à 15:16
Bonjour,

En bonne pratique, il vaut mieux nous préciser pourquoi tu penses qu'il y a une erreur.
Ici, vu le code, je pense qu'il s'agit d'un SEGFAULT.
char *r;
Il faut réserver une zone mémoire dans le tas, car sinon tu as écrit au hasard dans la mémoire...
Pour cela, tu peux utiliser malloc (ne pas oublier d'inclure stdlib.h).
char *r=malloc(5);


Je te conseille également de remplacer tes chiffres 5 par une variable que tu auras probablement calculé via :
int taille=strlen(s1);

De fait, il faut mettre cette instruction après char *s1="salut";

Merci pour la prochaine fois de poster ton code entre deux balises "code c".
Exemple :
<"code c">/*ici je mets mon code*/<"/code"> (sans les guillemets).
Cdlt,

Google is your friend
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 11/08/2014 à 18:02
Je me corrige. Il faut plutôt faire malloc(6);
Il faut garder un byte pour stocker le '\0'.
Du coup il ne faudra pas oublier de le rajouter manuellement à la fin de ta fonction.
0
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 1
11 août 2014 à 17:40
Merci pour votre réponse, effectivement c'était un problème d'allocation mémoire.
Et merci pour l'information :)

Cdlt
0