IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

mon compilateur me rajoute des bizzareries sur mes chaînes de caractères !


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut mon compilateur me rajoute des bizzareries sur mes chaînes de caractères !
    Bonsoir tous,

    Je fais un mini-programme qui doit copier la première moitié d'une chaîne et la deuxième moitié d'une autre dans une troisième chaîne et apparemment ça réussit, sauf que le compilateur me rajoute des caractères bizarroïdes !

    Le voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    char ch1[50]="achille";
        char ch2[50]="illiade";
        char ch3[50];
     
     
        strncpy(ch3,ch1,strlen(ch1)/2);
     
        int i;
        for(i=strlen(ch1)/2;ch2[i]!='\0';i++)
        {
            ch3[i]=ch2[i];
        }
     
        printf("%s \n",ch3);

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Salut,

    Quels sont les caractères qui sont rajoutés ?

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par bounadalvidal Voir le message
    Je fais un mini-programme qui doit copier la première moitié d'une chaîne et la deuxième moitié d'une autre dans une troisième chaîne et apparemment ça réussit, sauf que le compilateur me rajoute des caractères bizarroïdes !
    Lors de la construction de ch3, tu ne met pas le 0 terminal, il ne s'agit donc pas d'une chaîne valide.

    Lors de l'appel à printf(), tout les caractères jusqu'au 0 terminal vont être imprimé, puisqu'il n'y a pas ce 0 dans la chaîne tu vas afficher ce qui suit la chaîne construite jusqu'à rencontrer un 0.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonjour,

    C'est normal, tu vérifies dans ta boucle si tu rencontres le '\0' final dans ta deuxième chaîne, mais tu ne le recopies pas dans la troisième. Du coup, le résultat n'a pas de terminateur et ton printf() t'affiche tout ce qui le suit en mémoire.

    (Édit : grillé).

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Flob91 Voir le message
    Salut,

    Quels sont les caractères qui sont rajoutés ?
    Des puissances, des triangles, et autres...

    Fallait rajouter cette ligne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /*...code...*/
        ch3[strlen(ch2)+strlen(ch1)/2-3]='\0';
     
        printf("%s \n",ch3);
    Merci pour vos réponses !

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Je ne sais pas si ta formule est correcte mais i, à la fin de ta boucle, se trouve juste après le dernier caractère, donc exactement là où tu veux déposer ton terminateur. Donc :


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Des shadows sur mes tabs
    Par Gaaaga dans le forum Flex
    Réponses: 1
    Dernier message: 24/05/2008, 08h46
  2. Des Shadow sur mes Tabs
    Par Gaaaga dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/05/2008, 10h06
  3. Affichage des accents sur mes pages
    Par ned-flanders dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 29/02/2008, 13h24
  4. Réponses: 3
    Dernier message: 06/06/2007, 18h13
  5. Récupérer des infos sur mes sites
    Par meufeu dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2006, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo