[C] caractères bizzards..

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
--
Max

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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 !!!!!