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 :

Erreur sémantique lors de la concaténation de deux chaines de caractères


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Erreur sémantique lors de la concaténation de deux chaines de caractères
    Bonjour à tous,

    J'ai pour les cours à expliquer le fonctionnement d'un bout de code, j'en comprend bien le sens mais j'ai une erreur alors que je ne devrais pas en avoir.

    La ligne qui fait planter le programme est la ligne, je ne comprends pas pourquoi :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memmove (dest+ l_dest, ajout, nb_carac_max - l_dest);
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    int main()
    {
        char tab1[10] = "Coucou, ";
        char tab2[40] = "tu veux voir ma paire de lunette ?";
    // On créé deux tableau et l'on va concaténer le premier au second.
        concat(tab1,tab2,70);
        cout<< tab1;
    // On affiche la concaténation du tableau 1
        return(0);
    }
     
    /*Fonction cacaténer
    Elle permet de concaténer une chaîne de caractère 2 à une chaine de caractère 1 afin d'obtenir un seul tableau.
    */
     
    char* concat(char *dest, const char *ajout, int nb_carac_max)
    {
        int l_dest= strlen(dest);
        int l_ajout= strlen(ajout);
     
        if( nb_carac_max <= 0 || nb_carac_max > l_dest + l_ajout)
        {
            nb_carac_max= l_dest+ l_ajout;
        }
     
        if( nb_carac_max > l_dest)
        {
            memmove (dest+ l_dest, ajout, nb_carac_max - l_dest);
        }
        dest[nb_carac_max] = '\0';
        return dest;
    }
    Questions :
    Pour le prof écrit "return dest;" et non pas "return (dest);" ?
    Dernière modification par gbdivers ; 27/12/2012 à 10h44.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 118
    Par défaut
    Ton tableau tab1 n'a pas une taille suffisante pour la concaténation, utiliser memmove dans un tel cas ne peut que conduire à des Undefined Behavior.

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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Salut,

    Le probleme du plantage est que ton tableau de destination n'est alloué que pour 10 caractères.

    Ensuite, le

    est exactement pareil que :

    Juste que ca enleve toute ambigüité.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Super
    Merci beaucoup, je me disais que cela provenait de la taille du tableau, mais je pensais naïvement que celui-ci s'agrandissait automatiquement ^^
    Résolu

  5. #5
    Invité
    Invité(e)
    Par défaut
    Dernière question ^^

    Quel est l'intérêt du return dans cette fonction ?

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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Cela permet de retourner le pointeur de la chaine de caractères résultant de la concaténation

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Juste par curiosité: c'est un cours de C ou un cours de C++?

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

Discussions similaires

  1. erreur de concaténation de deux chaines
    Par 3aychoucha dans le forum C++
    Réponses: 5
    Dernier message: 08/09/2011, 11h34
  2. concaténation de deux chaines
    Par mdh12 dans le forum C
    Réponses: 13
    Dernier message: 11/11/2009, 20h25
  3. Erreur kettle lors de la synchronisation de deux tables.
    Par kilrou dans le forum kettle/PDI
    Réponses: 9
    Dernier message: 20/08/2009, 12h30
  4. problème de concaténation de deux chaines
    Par info79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2008, 17h04
  5. comparer deux chaines de caractères
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 14h31

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