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 de concaténation de deux chaines


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut erreur de concaténation de deux chaines
    Bonjour,
    j'ai 3 double que je veux les concaténer, je l'ai donc converti en string avec sprintf et jusqu'à maintenant j'affiche mais string et c'est bon.
    Ensuite j'ai concténer ces chaines en utilisant strcat mais j'ai eu une chaîne qui contient une première partie (du n'importe quoi) et une deuxième partie(mes 3 doubles concaténés)
    Je développe avec VS2008
    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
     
             char pos[50], str_X[20], str_Y[20], str_Z[20];
     
             sprintf(str_X, "%f", x);
    	  std::cout<<"x "<<x<<std::endl;
    	 sprintf(str_Y, "%f", y);
    	  std::cout<<"y "<<y<<std::endl;
    	 sprintf(str_Z, "%f", z);
    	  std::cout<<"z "<<z<<std::endl;
     
    	 std::cout<<"pos "<<pos<<std::endl;
    	 strcat(pos,str_X);
    	 std::cout<<"pos "<<pos<<std::endl;
    	 strcat(pos,", ");
    	 std::cout<<"pos "<<pos<<std::endl;
    	 strcat(pos,str_Y);
    	 strcat(pos,", ");
    	 std::cout<<"pos "<<pos<<std::endl;
    	 strcat(pos,str_Z);
    	 drawString(pos);
    	 std::cout<<"pos "<<pos<<std::endl;
    voici un exemple de la chaîneaffichée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ö*^3.333332,5.447821,9.776854
    Merci pour vos aides

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Lai,

    Avant tout appel de srtcat(Pos,...), il faut penser à initialiser Pos comme une chaîne vide (Pos[0] = 0).

    Ce problème ne se pose pas pour les autres, car les fonctions utilisées se chargent de considérer que la chaîne est vide, ce qui bien entendu n'est pas le cas de strcat, puisqu'elle sert à ajouter quelque chose à la fin de la chaîne.

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Merci droggo

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Du C++, des appels à sprintf et strcat ?

    Ah, nous ne sommes pas dans le même monde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <sstream>
     
    std::stringstream s;
    s << x << "," << y << "," << z;
    std::cout << "xyz = " << s.str() << std::endl;
    * std::string
    * std::stringstream

    sont tes amis, fait leur confiance !
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ils sont plus lents, tout de même.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par oodini Voir le message
    Ils sont plus lents, tout de même.
    Oui, mais s'ils avaient été utilisés, il n'y aurais pas eu de crash

    Ensuite, il sont plus lents donc à éviter dans le cas de fonctions critiques, mais quel pourcentage du code d'une application est critique à ce point ? A partir du moment ou on construit une chaine de caractère à partir de données existante, c'est qu'on va envoyer cette chaine (ou une version traitée de celle-ci) sur un périphérique (au sens large : l'écran, une base de données, etc). Les temps de latence des sorties disponibles sont bien souvent plus important que le temps qu'on va perdre à créer la chaine. Du coup, la criticité de l'opération est loin d'être prouvée.

    Enfin, plus lent, c'est vrai, mais dans quelle mesure ? Pour faire un strcat, il faut faire une allocation mémoire avant d'appeler strcat. On peut optimiser et faire une seule allocation si on a plusieurs strcat à faire - un cas qu'on peu facilement émuler en créant un std::string d'une taille donnée et en utilisant std::copy par la suite. Il faudrait faire un test en condition réelle, avec les optimisations qui s'imposent (c'est à dire une utilisation un peu plus poussée) avant de déterminer que l'écart de performance entre les deux est véritablement un problème.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 30/12/2012, 17h22
  2. Concaténation de deux deux chaines dans DropDownList
    Par stefsas dans le forum ASP.NET
    Réponses: 2
    Dernier message: 15/06/2010, 16h13
  3. la concaténation de deux listes chainées
    Par hindou90 dans le forum C
    Réponses: 10
    Dernier message: 19/02/2010, 09h20
  4. concaténation de deux chaines
    Par mdh12 dans le forum C
    Réponses: 13
    Dernier message: 11/11/2009, 20h25
  5. problème de concaténation de deux chaines
    Par info79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2008, 17h04

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