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 :

perte d'information char * en char *


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Par défaut perte d'information char * en char *
    Bonjour à tous,

    est ce que quelqu'un pourrait m'expliquer pourquoi dans ce 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
     
    vector<char *> nomFichier;
    /***boucle***/
    WCHAR* wc = File.cFileName; //nom du fichier
    _bstr_t b(wc);
    char* c = b;
    printf("Output: %s\n", c);//affiche le nom du fichier
    fx.xmlns = c;
     
    printf("Sortie: %s\n", fx.xmlns);//affiche toujours le nom du fichier
     
    nomFichier.push_back(fx.xmlns);
    /***fin boucle ***/
     
    printf("Liste:\n");
    printf("Sortie2: %s\n", nomFichier[2]); //affiche ||||F_|| ou quelque chose du genre //le 2 est un exemple valable
    dès que je passe par un accesseur/mutateur ou un vector mon char * devient une suite de caractères incompréhensibles?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    si tu essayes d'afficher le 3° élément (indice 2) d'un vector en contenant 1 seul (1 unique push_back), tu peux t'estimer heureux que le résultat ne soit qu'un affichage de caractères "bizarres" et non un crash.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Bonsoir,

    si tu essayes d'afficher le 3° élément (indice 2) d'un vector en contenant 1 seul (1 unique push_back), tu peux t'estimer heureux que le résultat ne soit qu'un affichage de caractères "bizarres" et non un crash.
    Non dans mon code je fais une boucle mon vector contient au moins 4 éléments j'ai juste enlevé cette partie pour que tout cela soit plus lisible

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    vu qu'on ne voit qu'une partie du code, je pense que tu es sorti du scope ou tu déclares

    et donc ta chaine a été détruite et autre chose en mémoire l'a remplacé. Essaye avec des std::string au lieu de tes char* et vois ce que ça donne. Idéalement, il faut utiliser std::string au maximum pour éviter ce genre de risques. Maintenant il nous manque quand même de l'info, on ne sait pas ce qu'est _bsrt_t (pas terrible de mettre un _ d'ailleurs, c'est réservé à la STL normalement) et comme tu as simplifié ton code on ne sait pas trop ce que font les sorties de scope puisqu'on ne les voit pas.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    _bstr_t est un type Microsoft pour wrapper BSTR.
    J'ignore ce que fait son operator char*, mais je suppose qu'il réserve un buffer dans l'objet lui-même, détruit avec l'objet.

    Ce qu'il faut faire, c'est bien recopier la chaîne pointée dans un buffer qui n'est pas contrôlé par l'objet (comme une std::string en effet).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. unsigned char* to char*
    Par xela2000 dans le forum MFC
    Réponses: 4
    Dernier message: 20/11/2005, 16h07
  2. conversion char wide char
    Par ep31 dans le forum MFC
    Réponses: 4
    Dernier message: 15/11/2005, 08h14
  3. [MySQL] Perte d'information lors d'une requête de visualisation
    Par niccco dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/10/2005, 13h46
  4. Pb Invalid Conversion "char" to "char*"
    Par kazarn dans le forum C++
    Réponses: 3
    Dernier message: 02/03/2005, 13h24
  5. glRotate et perte d'information
    Par Crapouille dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/08/2004, 21h07

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