Prob pour inverser des caractères
Bonjour, le but de mon exercice est d'inverser une chaine de caractères. j'ai donc réfléchi et j'ai trouver le morceau de programme ci-dessous :
Code:
1 2 3 4 5 6 7 8
| int e=0;
int longeurMot2;
longeurMot2=longueur(T2);//enregistre la taille de T2
for(e=0;T2[e]!='\0';e++)
{
T4[e]=T2[longeurMot2-1-e];
} |
L'inversion se fait donc correctement mais des caractères parasites viennent se placer à la fin de la chaine inversée.
Merci d'avance pour votre aide
Re: pourquoi ca marche pas?
Citation:
Envoyé par benito62
L'inversion se fait donc correctement mais des caractères parasites viennent se placer à la fin de la chaine inversée.
J'ai lu ton code et j'arrive pas à determiner l'erreur, je me demande sur la nature des caractères parasites qui se placent à la fin de la chaine!!!
Pouvez vous me donner un exemple d'éxécution.
Merci
je pense que le probléme est...
Je pense que le probléme et dans la fonction longueur(....), càd, je pense que la fonction longueur fournit une dimension du tableau plus grande que la vrai dimension. Alors le programme affiche des caractères parasites qui ne se trouvent pas dans le tableau mais dans la mémoire... Je pense que cela peut être la seule raison.
Question :
- Quelle est la déclaration de la fonction longueur(...)?
Merci :wink:
declaration de la fonction longueur()
la fonction longueur est défini comme suit :
Code:
1 2 3 4 5 6 7 8 9
| int longueur(char T[])
{
int a=0;
while(T[a]!='\0')
{
a++;
}
return(a);
} |
Re: declaration de la fonction longueur()
Citation:
Envoyé par benito62
la fonction longueur est défini comme suit :
Code:
1 2 3 4 5 6 7 8 9
| int longueur(char T[])
{
int a=0;
while(T[a]!='\0')
{
a++;
}
return(a);
} |
Tu sais que y'a strlen ?
Re: declaration de la fonction longueur()
Citation:
Envoyé par CSoldier
Citation:
Envoyé par benito62
la fonction longueur est défini comme suit :
[ int longueur(char T[])
{
int a=0;
while(T[a]!='\0')
{
a++;
}
return(a);
}]
Tu sais que y'a strlen ?
Et les balises code aussi? Une dernière chose, pense à faire des titres clairs car par définition lorsque les gens postent sur ce forum c'est que "ça ne marche pas" :lol:
:merci:
Re: pourquoi ca marche pas?
Citation:
Envoyé par ccensam
J'ai lu ton code et j'arrive pas à determiner l'erreur, je me demande sur la nature des caractères parasites qui se placent à la fin de la chaine!!!
Pouvez vous me donner un exemple d'éxécution.
Il ne faut être grand clerc pour supposer une erreur genre 0 de fin qui manque...
EDIT: Version corrigée et sécurisée.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include <stdio.h>
size_t longueur(char T[])
{
size_t i = 0;
while(T[i] != 0)
{
i++;
}
return i;
}
int invert(char const *T2, char *T4, size_t size)
{
int err=0;
size_t i = 0;
size_t len = longueur(T2);
if (len < size - 1)
{
for(i = 0; T2[i] != 0; i++)
{
T4[i] = T2[len - 1 - i];
}
/* -ed- ajoute */
T4[i] = 0;
}
else
{
err=1;
}
return err;
}
int main (void)
{
char const sin[] = "hello world";
char sout[]="???????????????????????????????";
int err = invert (sin, sout, sizeof sout);
if (!err)
{
printf("%s\n", sin);
printf("%s\n", sout);
}
return 0;
} |
Ce qui donne :
Code:
1 2 3
|
hello world
dlrow olleh |