[C] caractères bizzards..

Fermé
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 - 17 juil. 2006 à 09:22
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 - 17 juil. 2006 à 10:14
salut a tous ! ;)
Depuis que j'ai commencé a faire des prog avec des chaines de caractéres en C, j'ai souvent eu le meme probléme :
a la fin, ma chaine de caractére s'affichai mais avec des signes bizzard à la fin( genre des fléches, smiley, coeurs etc ...(sous dos mdr :) )
Donc j'ai quelque questions :
que sont ces signes, à quoi servent ils ?
et surtout pourquoi sont-ils là? et comment les faire disparaitre ??
voici un exemple de prog qui fait sa :
(je sais que l'on peu le faire plus facilement, mais l'exercice le posai comme ça :) )
#include <stdio.h>

#define MAXCAR 1000

#define AVANTOUI 1
#define AVANTNON 0

void verif(char texte[], char sortie[]);

int main(void)
{
    char texte[MAXCAR]; /* texte entré */
    char sortie[MAXCAR+1];/* texte a afficher en sortie */
    int c,i;/*caractére d'entré courant, cle*/
    
    for(i=0;(c=getchar()) != EOF && i < (MAXCAR-1);++i)
                        texte[i]=c;
    verif(texte,sortie);
    printf("\n%s", sortie);
    getchar();
    return 0;
}
void verif(char entre[], char sortie[])
{
     int i,j;/* clés*/
     int etat=AVANTNON; /*defini l'état du caractére d'avant( \n ou pas )*/
     j=i=0;
     while(entre[i] != '\0')
     {
                    /* suppretion des lignes vide */
                    if(entre[i]=='\n' && etat==AVANTNON)
                    {
                                      etat=AVANTOUI;
                                      sortie[j]=entre[i];
                                      ++j;++i;
                    }
                    else if(entre[i]=='\n' && etat==AVANTOUI)
                    {
                         ++i;
                    }
                    else
                    {
                        sortie[j]=entre[i];
                        etat=AVANTNON;
                        ++i;++j;
                    }
     }
     sortie[j]='\0';
                                                          

 }

D'avance merci de votre aide :D
A voir également:

1 réponse

hamzafes Messages postés 243 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 4 mai 2013 54
17 juil. 2006 à 10:08
Salam,

Ces caractères apparaissent parfois quand la chaîne de caractères affichée ou traitée ne se termine pas avec ‘\0’.
Je vois que vous affectez ‘\0’ au dernier caractère du tableau sortie[], mais je trouve rien dans votre code qui peut faire la même chose pour texte[]


Allah mo3ine
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
17 juil. 2006 à 10:14
ah, que je suis ***
je epnsais que ce n'étais pas utile....
mais a partir du moment ou j'écrit while(texte[i] != '\0') ça l'est :D
MERCI !!!!!
0