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 :

Concaténation...


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Par défaut Concaténation...
    Bonjour, je ne suis pas un expert en C++ et cela fait bien 2 heures que je cherche dans les différents cours et FAQ comment bien manier les chaînes de caractères et en particulier celle du type char* :
    J'aimerai concaténer des variables de type char*.
    J'ai trouver la classe String qui permet de faire pas mal de choses, mais je ne trouve pas comment convertir des string en char*, ce qui dans mon cas est indispensable.
    Je sais que cette question est de faible niveau, mais j'ai vraiment besoin d'aide la-dessus, merci d'avance


    EDIT : OUPS!! j'était plonger dans le méga cours de C++ et j'avais pas vu que la FAQ donnait une réponse a mon problème. Je suis vraiment désolé d'encombré le forum avec ces sotise.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Voila comment perso je m'en sors avec les concatenations de pointeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    char tmp[256];
    char *ptmp = tmp;
     
    strcpy(ptmp, string1);
    while(*ptmp) ptmp ++;
    strcpy(ptmp, string2);
    il y a certainement des manieres plus faciles. Mais normalement celle ci marche a tous les coups.
    Le principe c'est de remplir la chaine avec string1, puis de parcourir la memoire jusque trouvé une zone vide et d'en suite y mettre la seconde chaine.
    Sinon peut etre que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ptmp = string1;
    strcat(ptmp,string1);
    marche mais ca fait tellement de temps que je me fais chier en UNICODE que je ne sais plus trop :p

  3. #3
    Membre chevronné Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 402
    Par défaut
    y'a pas une méthode c_str() sur les string ?

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    oui, le passage d'une string vers un const char * se fait via la méthode c_str()

    oui strcat concatène des car * mais attention cela ne fait pas d'allocation, le recepteur devra être une zone mémoire assez longue, la fonction ne peut rien vérifier, bref gare au écrasement mémoire ... et justement l'exemple donné par Raton est plutot raté ( ) car il concatène une chaine avec elle meme, suivant l'implémentation de strcat cela peut remplir toute la mémoire !
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Un bien plus gros, car sournois, problème avec le code de raton, c'est le buffer overflow qui lui pend au nez.

    Si vraiment tu veux procéder avec les fonctions C, tu commences par calculer les longueurs de tes deux chaines à concaténer, et ensuite,
    - soit tu te déclares incapable de concaténer,
    - soit tu alloues une zone mémoire dont la dimension est la somme des longueurs + 1.

    Sans ça, c'est problèmes à long terme, et faille de sécurité suivant sur quoi tu bosses.

    En C++, c'est 100 fois plus simple, voir la FAQ.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Concaténation de 2 select en 1 seul
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/08/2003, 11h38
  2. Char(x) -> chaine concaténée d'espaces ?
    Par rgz dans le forum Débuter
    Réponses: 7
    Dernier message: 27/06/2003, 11h59
  3. Concaténation vertical ???
    Par loaded dans le forum Langage SQL
    Réponses: 10
    Dernier message: 07/05/2003, 15h44
  4. Concaténer TStrings
    Par Tuxxy dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/03/2003, 12h30
  5. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26

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