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 :

Problème de concaténation de chaînes


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Par défaut Problème de concaténation de chaînes
    Bonjour,

    J'ai un problème de concaténation de chaînes de caractères de type char*. Je sais qu'en utilisant les string, ce serait plus simple, mais j'ai absolument besoin d'utiliser les char*. Voici mon 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    toto.h : 
     
    #include<string.h>
    #include<iostream>
     
    void concat(char *c1, char *c2);
     
    toto.c
     
    void concat(char *c1, char*c2)
    {
         char fusion[] = "\0";
     
         strcat(fusion, c1);
         strcat(fusion, c2);
     
         cout << fusion << endl;
    }
     
    main.c :
     
    #include "toto.h"
     
    int main(void)
    {
        concat("test1/test2/","test3/test4");
    }
    Mon cout affiche bien la chaîne concaténée, mais j'ai un beau "RUN FAILED (exit value 139)". C'est une erreur de "segmentation violation" !

    Pour des raisons qui me sont obscures, si je supprime les "/" et les chiffres, ça fonctionne ... je ne comprends vraiment rien ! Pouvez-vous m'aider ?

    Je suis sous Kubuntu, je travail avec Netbeans 6.9.

    Merci d'avance,

    Syl

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    pourquoi tu ne postes pas dans le forum C?

  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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par syl1405 Voir le message
    J'ai un problème de concaténation de chaînes de caractères de type char*. Je sais qu'en utilisant les string, ce serait plus simple, mais j'ai absolument besoin d'utiliser les char*.
    Pourquoi as-tu absolument besoin d'utiliser des char* ? std::string dispose de la fonction c_str permettant de récupérer une chaîne C-style depuis un string.

    Généralement on essaie de travailler au maximum avec des std::string et d'utiliser c_str lorsqu'on a besoin de récupérer la chaîne C-style correspondante.

    Citation Envoyé par syl1405 Voir le message
    Voici mon 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    toto.h : 
     
    #include<string.h>
    #include<iostream>
     
    void concat(char *c1, char *c2);
     
    toto.c
     
    void concat(char *c1, char*c2)
    {
         char fusion[] = "\0";
     
         strcat(fusion, c1);
         strcat(fusion, c2);
     
         cout << fusion << endl;
    }
     
    main.c :
     
    #include "toto.h"
     
    int main(void)
    {
        concat("test1/test2/","test3/test4");
    }
    Mon cout affiche bien la chaîne concaténée, mais j'ai un beau "RUN FAILED (exit value 139)". C'est une erreur de "segmentation violation" !
    Tel que défini ici, fusion est un tableau d'un seul élément. Il n'y a donc tout simplement pas la place d'y mettre "test1/test2/test3/test4". On a là un débordement de buffer et donc un comportement indéfini. D'où l'erreur.

    Citation Envoyé par syl1405 Voir le message
    Pour des raisons qui me sont obscures, si je supprime les "/" et les chiffres, ça fonctionne ... je ne comprends vraiment rien ! Pouvez-vous m'aider ?
    Tu as un comportement indéfini, tout peut donc arriver, y compris un code qui par malchance fonctionne parfois.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Parce que "cout" "endl" c'est du C++.
    Je pense que la raison est l'absence totale de réservation d'espace mémoire.
    ... mais gl a été plus rapide que moi.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Par défaut
    J'ai posté ça dans C++ parce que j'utilisais justement des classes/méthodes, donc au cas où ça pouvait venir de là ...

    Sinon concernant les char* à la place des string, c'est simplement parce que je reprends le travail de mes prédécesseurs, et comme ils ont codé en C, il n'y a pas de string et je ne veux pas me retaper toutes leurs fonctions à chager tous les paramètres.

    En effet, l'erreur a été résolue en donnant une taille initiale à la chaîne ... c'est pas très flexible ça, donc finalement je suis passé par les string + .c_str().

    Merci pour vos réponses !

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    tu le dis toi même, c'est codé en C. Donc tu auras plus de réponses pertinentes dans le forum C.

    Même si ailleurs dans le code il y a des classes et des std::cout, si tu utilises la partie C du C++, autant demander dans le forum C.

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

Discussions similaires

  1. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34
  2. concaténation de chaîne de caractère
    Par jh0483 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/08/2005, 17h10
  3. [XSLT 1.0] Concaténation de chaînes
    Par tofita_49 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 25/07/2005, 18h34
  4. Problème de concaténation
    Par Proktor dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/07/2005, 15h00
  5. Problème d'affichage de chaîne
    Par duplo dans le forum Assembleur
    Réponses: 5
    Dernier message: 06/11/2004, 15h01

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