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

Langage C++ Discussion :

problème ce char vers char*


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 23
    Points
    23
    Par défaut problème ce char vers char*
    Bonjour,
    J'ai une fonction que je vais appeler "int fonction(char* entree)" qui n'accepte que un tableau de caractères (char*), or j'ai une fonction "char autreFonction()" qui renvois un caractère. le Problème c'est comment faire pour mettre la sortie de autreFonction dans l'entrée de fonction, autrement dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int fonction(char* entree) 
    {
     // ....
      return 0;
    }
    char autreFonction() 
    {
      // ....
      return 'a';
    }
     
    fonction(autreFonction()); // ???

    en plus concret voici ce que je veux éviter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int Q = fonction();
     
    char QSTR[1];
    QSTR[0] = (char)pA->getQ();
     
    char QG_STR[1];
    sprintf(QG_STR, "%d", Q);
     
    if(strcmp(QG_STR, QSTR) != 0)
    {
    //...
    }
    merci bien!

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    En C++, on préfère :
    - les références aux pointeurs
    - les std::vector aux tableaux
    - les std::string aux char * (lorsque le char * est un tableau de char)

    Je te conseille de lire la FAQ C++.

    Pour répondre à ta question :
    Dans ton cas, ton char * à l'air d'être une adresse vers un char. Il faut donc que tu passes par une variable et que tu donnes l'adresse de cette variable à la deuxième fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char a = autreFonction();
    fonction(&a);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Merci beaucoup,
    Je suis 100% d'accord avec toi pour les préférences en C++, le problème c'est que tout est déjà codé comme ça (code client) depuis plus de 10ans.. avec des milliers de lignes de codes..
    En revanche j'ai une question complémentaire:
    que faire si int autreFonction() renvoie un entier au lieu d'un caractère, et fonction( char* entree) attend toujours une chaine de caractères?

    Merci d'avance!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    autrement dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int fonction(char* entree) 
    {
     // ....
      return 0;
    }
    int autreFonction() 
    {
      // ....
      return 49;
    }
     
    fonction(autreFonction()); // <<<<problème ici

  5. #5
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Je laisses à d'autre le soin de pestiféré sur une telle question ^^

    Prérequis :
    un char * est, dans ton cas, une adresse vers un char.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c; // un char
    char * p_c = &c; // p_c est un pointeur vers un char, &c est l'adresse de c
    Réponse simple :
    Un int n'est pas un char et un char n'est pas un int. Tu ne peux pas, ou plutôt, tu ne dois pas "transformer" l'un en l'autre.

    Réponse un peu plus complète :
    Un char est un entier une taille de 1, c'est-à-dire au moins 8 bits. On peut le "transfomer" en int qui est normalement plus grand.
    L'inverse est plus délicat mais est possible si la valeur du int est représentable dans un char (s'il n'y a pas d'overflow).
    C'est dangeureux, c'est pour ça que le compilateur devrait émettre un warning.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c = autreFonction();
    fonction(&c);

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    C'est pas sympa de changer les données du problème, ça ne m'avance pas du tout:

    J'ai besoin de convertir car je ne dois et ne peu pas changer ces fonctions donc oui je cherche à transformer un char en int et c'est un cas de la vraie vie....

  7. #7
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Par changer un char en int t'entends :

    '1' = 1

    ou

    '1' = 17

    ?

    Dans le premier cas regarde du cote de la classe istringstream ou les fonctions du C qui le font fort bien (certains les preferents a leurs homologues du c++).

    Pour le deuxieme cas, rien de plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char a = '1';
    int b = a;
     
    cout << b << endl;
    Citation Envoyé par KR_Prog
    C'est pas sympa de changer les données du problème, ça ne m'avance pas du tout:

    J'ai besoin de convertir car je ne dois et ne peu pas changer ces fonctions donc oui je cherche à transformer un char en int et c'est un cas de la vraie vie....
    Critiquer je veux bien, mais "transformer un char en c'est un cas de la vraie vie" je capte pas... De plus, c'est une operation basique en C++, donc sois un peu plus respectueux de ceux qui prennent le temps de te repondre s'il-te-plait. Surtout que la il t'expliquait des choses tout a fait en rapport avec ton probleme.

  8. #8
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Dangereux de passer un &c à une fonction qui attend un char*. Vraisemblablement, elle attend une chaîne terminée par un '\0' --> kaboom.

    Sinon, je m’interroge sur « reprendre du code de +10 ans », et poser des questions aussi basiques. Peut-être as-tu l’habitude d’autres langages, mais là, avant même d’essayer de modifier des choses dans le code, il faut commencer par acquérir de solides bases (vu ce que tu décris du code, plutôt en C qu’en C++, après, c’est peut-être un mix des deux).

  9. #9
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut
    Je viens de remarquer que le deuxième code n'a pas grand chose à voir avec le premier, mais n'a pas de sens, erreur d'inattention ou bien a-t-on vraiment répondu à côté de la plaque ?

  10. #10
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Points : 311
    Points
    311
    Par défaut
    Pour moi la solution qui me vient à l'esprit en voyant ton problème de fonction qui retourne maintenant un int plutôt qu'un char* c'est le polymorphisme.
    C'est un des grands avantage du C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int fonction(char *);
    int fonction(int);
    Ca le compilateur c'est le résoudre tout seul.
    Donc si tu déclares une nouvelle fonction qui prend un int en paramètre tu n'as pas à intervenir sur le code existant. Ca c'est la première étape.
    La deuxième étape ce trouve dans l'implémentation de ta nouvelle fonction.
    Celle-ci va convertir l'integer comme tu le souhaites en char*, puis appeler la fonction "fonction(char*)" et retournera le résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int fonction(int) {
    // Ici tu convertis l'integer en char en utilisant les règles que tu souhaites et qui seront cohérentes du traitement qui sera fait de ce char.
    char * temp = conversion du int;
    int resultat = function(temp);
    return resultat;
    }
    Alors certain diront que ce n'est pas forcément ce qu'il y a de plus propre ou d'idéal, mais cela te permet de contourner ton problème et ainsi d'avoir un impact minimum sur ton code.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/06/2009, 18h18
  2. problème d'extraction depuis char vers string
    Par a_lincoln54 dans le forum C++
    Réponses: 8
    Dernier message: 06/07/2008, 13h24
  3. Probléme de conversion char vers datetime
    Par locs dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 28/02/2007, 15h29
  4. pb conversion unsigned char vers char *
    Par FamiDoo dans le forum C
    Réponses: 11
    Dernier message: 24/08/2006, 18h11
  5. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42

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