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 :

Pb d'nitialisation d'un const char*


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Par défaut Pb d'nitialisation d'un const char*
    Bonjour,

    j'ai un pb avec l'initialisation d'un const char*. Je vous explique :

    j'ai un parser Xml qui demande en entrée un const char* pour fonctionner, mpais le pb qu'il se pose c'est que mes lignes Xml ne sont pas statiques, c'est-à-dire que je récupère des coordonnées d'un émetteur (x,y), et je voudrais les insérer dans ma ligne Xml. Mais le souci qu'il y a c'est que je ne sais pas comment faire pour initialiser un const char* avec des valeurs non statiques. Voici un exemple du code :

    const char* mesure;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            const char* mesure;	
            mesure="<Placement xom=0 yom=0>";
    //les 2 zéros de xom et yom, je voudrais les remplacer par la valeur de emetteur_x et emetteur_y, qui sont 2 doubles.
    J'ai essayé avec sprintf mais ce la ne fonctionne pas car elle attend unn char*.

    Donc si kelkun à une solution, cela serait super.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    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 287
    Par défaut
    const char * => pointeur vers caractères constants.

    Si ta fonction C accepte un const char *, alors elle veut juste dire qu'elle ne modifiera pas ce que tu lui passes. Toi tu peux très bien lui passer un pointeur vers un buffer modifiable, la fonction le considèrera en interne comme non modifiable, grâce à la convertion implicite "char *" -> "const char *".
    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...

  3. #3
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Par défaut
    Citation Envoyé par Luc Hermitte
    const char * => pointeur vers caractères constants.

    Si ta fonction C accepte un const char *, alors elle veut juste dire qu'elle ne modifiera pas ce que tu lui passes. Toi tu peux très bien lui passer un pointeur vers un buffer modifiable, la fonction le considèrera en interne comme non modifiable, grâce à la convertion implicite "char *" -> "const char *".
    Oui je sais mais j'ai déja essayé mais le programme ne se ptermine pas correctement puisqu'il me fait une erreur "Unhandled Exception".

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    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 287
    Par défaut
    Hum ... Je n'avais pas lu ton code.
    La mémoire doit être réservée quand tu utilises des pointeurs.

    Soit tu passes par des buffers statiques -> problème de limites idiotes dans le programme

    Soit tu passes par des buffers alloués à l'exécution -> encore faut-il savoir quelle longueur aura la chaine, et encapsuler le tout dans une variable automatique (ou employer un autre procédé) qui permettra de ne pas perdre la mémoire réservée en cas d'exception et autres ennuis.

    Soit tu passes par des std::string -> c'est le type C++ pour les chaines de caractères. La FAQ est ton amie.
    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...

  5. #5
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Par défaut
    Je te remercie pour ta réponse, mais en ait je voulais juste savoir s'il était possible d'initialiser un const char* avec une chaîne du style :

    const char* mesure=("coucou %d", x) un style comme ca ou le %d serait remplace par la valeur de x, comme ds un sprintf;

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Non.
    Mais un char * peut être converti en const char * implicitement. Donc utilise un buffer de char, ou mieux une string en C++.
    http://c.developpez.com/faq/cpp/?pag...TRINGS_to_char
    http://c.developpez.com/faq/cpp/?pag...RINGS_numtostr

  7. #7
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Par défaut
    Ok merci, je vais regarder.
    Excuse moi de te casser les pieds comme ca mais ca ait 2 jours ke je suis sur ce problème.

    Encore merci.

  8. #8
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Par défaut
    C'est bon, j'ai trouvé la solution ki à mon sens me paraît bizarre mais bon. J'ai allouer 1000 cases mémoires à mon char* et cela marche à présent.

    Merci kan meme.

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    A mon avis ce n'est pas la meilleure. Donne une chance à std::string.

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Pour t'encourager, voilà le code, garanti sans fuite de mémoire / risque de buffer overflow:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ostringstream oss;
    oss << "coucou " << x;
    string mesure = oss.str();
    ma_fonction_const_char_etoile( mesure.c_str() );

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

Discussions similaires

  1. [MFC - ATL] CString vers const char *
    Par VitamineC dans le forum MFC
    Réponses: 2
    Dernier message: 12/04/2006, 18h56
  2. Réponses: 6
    Dernier message: 28/10/2005, 12h11
  3. [Appli Console]Pb exec command ac fct system(const char *)
    Par Le_magicien999 dans le forum MFC
    Réponses: 2
    Dernier message: 16/08/2005, 16h07
  4. Conversion CString en const char*
    Par LRobi dans le forum MFC
    Réponses: 8
    Dernier message: 19/07/2005, 12h12
  5. Réponses: 13
    Dernier message: 06/03/2005, 15h21

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