Probleme fonction C

Résolu/Fermé
jean - 23 avril 2008 à 11:45
 jean - 23 avril 2008 à 12:54
Bonjour,

J'ai un leger soucis dans le codage d'une fonction, la compilation ne me renvoie pas d'erreurs mais ne fait pas ce que je souhaite, en effet en affichant un printf les espaces sont toujours là alors que mon but est de les supprimer.

void supprime_espace(char *copie, char *ssespace)
{
unsigned i=0;
unsigned n = strlen(copie);
while (i <= n)
{
if ( !isspace(*copie) )
{
ssespace[i] = copie[i];
i++;
}

else
{
i++;
}
}
}

La nouvelle chaine ssespace qui devrait être la même que la précédente en ayant comme son nom l'indique supprimer les espaces ne le fait pas. j'ai ensuite essayer de passer avec un pointeur voir si ça allait pas mieux fonctionner mais je me suis casser les dents étant donné qu'après m'afficher le même résultat que précédemment le programme plante. Je me demande donc si le problème ne vient pas de la fonction if en fait plutôt mais bon je me suis demander pas mal de choses sans pour autant trouver le résultat escompté.

void supprime_espace(char *copie, char *ssespace)
{
unsigned i=0;
unsigned n = strlen(copie);
char *pcopie = 0;
while (i <= n)
{
if ( !isspace(*pcopie) )
{
ssespace[i] = *pcopie;
pcopie++;
i++;
}

else
{
pcopie++;
i++;
}
}
}

int main(){
char phrase[20];
char copie[20];
char ssespace[20];

recuperation(phrase);

copy(phrase,copie);
printf ("la chaine copiee est : %s\n",copie);

supprime_espace(copie,ssespace);
printf ("la chaine sans espace est : %s\n",ssespace);


// system("PAUSE");
getchar();
return EXIT_SUCCESS;
}


Il y a auparavant une fonction qui demande l'entrée de la chaine nommée phrase puis une deuxième qui est une copie de la chaine.

Merci pour le temps que vous m'accorderez

1 réponse

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
23 avril 2008 à 12:26
Aïe, ça pique les yeux ton code !
lorsque tu défini un pointeur:
type *var;
que ce pointeur est un tableaux, alors *var==var[0] !
de plus si tu fais var=0, alors *var ou un truc dans le genre risque de mal se passer : tu oublie d'allouer de la mémoire.
dans ta première fonction, quand tu fait if ( !isspace(*copie) ) tu test à chaque boucle si *copie, ou copie[0] est une espace ou non. Remplace par if ( !isspace(copie[i]) ) ça devrai être mieux.
Dans ta deuxième fonction, tu déclare un pointeur pcopie, que tu met à 0 ! aucun sens.
fait pcopie=copie;
et lorsque le caractère est une espace n'incrémente pas i, sinon, tu fait des trous dans ta chaîne ssespace
Voilà, après ça devrais aller mieux.
0
Merci beaucoup, effectivement ça fonctionne mieux en pointant sur la chaine, dur dur de debuter en programmation ^^.

Bonne journée!
0