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 :

retourner tableau dans une fonction


Sujet :

C++

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut retourner tableau dans une fonction
    Bonjour à tous!

    Je débute dans le C++. Je viens de réaliser une fonction de conversion ASCII -> Hexadecimal.

    Cette fonction prend comme paramètre d'entrée un tableau de 8 entiers et doit retourner un tableau de 2 chars.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char* hexa(int *tab)
    {
     
    char *tab_hex = new char[2];
     
    //remplissage du tableau en fonction des 8 bits de tab (à base de if).
     
    return ((char*) tab_hex);
    }

    et à partir de là, je n'arrive pas à afficher les deux valeurs du tableau dans une autre fonction...

    Comment faut-il faire?

    Merci d'avance!!

    (je ne peux copier coller tous les if car je développe sur un PC qui n'a pas internet, désolé...)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Lu,
    Il me semble que le cast au niveau du return est inutile puisque tu as deja un char*.
    Sinon est-ce que t'arrives a afficher le tableau dans ta fonction,essaie juste avant le return.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    oui quand je fais printf juste avant le return mais avec des tableaux définis par moi-même dans la fonction.

    C'est quand j'appelle la fonction que ça ne marche plus...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    On peut voir plus de code s'il te plait ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Oui montre nous un peu plus de code

    Citation Envoyé par theory23 Voir le message
    oui quand je fais printf juste avant le return mais avec des tableaux définis par moi-même dans la fonction.
    Qu'est ce que t'entends par "définis par moi-même dans la fonction."?

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Désolé d'avoir mis tant de temps à répondre, petit souci de santé...
    Mais ça va mieux

    alors voila mon 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
    17
    18
    19
    20
    21
    22
    23
    24
    char* FenetrePrincipale::hexadecimal(int *tab3){
     
    char *tab_hex = new char [2];
     
    //int tab3[8] ={0,1,1,1,0,0,1,1};
     
    int k=0;
     
    if(tab3[k] == 0 && tab3[k+1] == 0 && tab3[k+2] == 0 && tab3[k+3] == 0){
        tab_hex[0] = 0;
        //printf("%d \n",tab_hex[0]);
        }
     
    if(tab3[k] == 1 && tab3[k+1] == 0 && tab3[k+2] == 0 && tab3[k+3] == 0){
        tab_hex[0] = 1;
        }
     
    ....
     
    //printf("%d%d \n\n",tab_hex[0], tab_hex[1]);
     
    return ((char*)tab_hex);
     
    }
    et je cherche à appeler cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void FenetrePrincipale::genererCode()
    {
    int tab_xor6[8]={0,1,1,1,0,0,1,1};
     
    char* result = hexadecimal(tab_xor6);
     
    printf("%s \n",result);
    }
    et là rien ne s'affiche...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Le tableau que tu passe en parametres ne verifie pas les confitions.
    int tab_xor6[8]={0,1,1,1,0,0,1,1};
    Les quatre premieres cases ne sont ni egales a {0, 0, 0, 0} ni a {1, 0, 0, 0}.

    En plus: je ne vois toujours pas a quoi sert le cast et ta variable k semble obsolete.

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Effectivement, %s spécifie que c'est une chaîne de caractère à la C qui doit être affichée. Or, une chaîne de caractère C-style est une suite de char terminée par un '\0'. Ensuite, tout dépend de ce que tu veux afficher. Si ce sont les valeurs (en tant qu'entier) alors tu dois utiliser les format %d (format de spécifications) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%d %d\n",static_cast<int>(result[0]),static_cast<int>(result[1]));
    Dans l'ordre, je me permets quelques remarques :
    1/ Tu ne gère pas l'échec d'allocation dans hexadecimal,
    2/ Tu ne détruit pas le pointeur dans genererCode,
    3/ En C++, on préfère l'utilisation des conteneurs (dans ton cas un std::vector) plutôt que les tableaux dynamiques pour éviter justement ces soucis.
    4/ En C++, on utilise les flux et non les fonctions printf.
    5/ En C++, on n'utilise pas les cast à la C, mais les opérateurs dédiés
    Ce qui pourrait donner :
    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
     
    std::vector<char> FenetrePrincipale::hexadecimal(std::vector<int>const & tab3) const
    {
     
       std::vector<char> tab_hex;
       tab_hex.resize(2);
     
       int k=0;
     
       if(tab3[k] == 0 && tab3[k+1] == 0 && tab3[k+2] == 0 && tab3[k+3] == 0){
           tab_hex[0] = 0;
        }
     
       if(tab3[k] == 1 && tab3[k+1] == 0 && tab3[k+2] == 0 && tab3[k+3] == 0){
           tab_hex[0] = 1;
        }
    //   ....
     
       return tab_hex;
    }
    et
    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
    22
    23
    24
    void FenetrePrincipale::genererCode() const
    {
       std::vector<int> tab_xor6;
       tab_xor6.reserve(8);
       tab_xor6.push_back(0);
       tab_xor6.push_back(1);
       tab_xor6.push_back(1);
       tab_xor6.push_back(1);
       tab_xor6.push_back(0);
       tab_xor6.push_back(0);
       tab_xor6.push_back(1);
       tab_xor6.push_back(1);
     
       std::vector<char> result = hexadecimal(tab_xor6);
     
       std::cout<<static_cast<int>(result[0])<<" "<<static_cast<int>(result[1])<<std::endl;
       // ou :
       std::copy(
          result.begin(),
          result.end(),
          std::ostream_iterator<int>(std::cout," ")
       );
       std::cout<<std::endl;
    }
    Et tu auras besoin des en-têtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <iostream> // pour les std::cout
    #include <iterator> // pour les std::ostream_iterator
    #include <vector> // pour les std::vector

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Ah oui j'avais pas vu le changement de C (premier bout de code) vers C++.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Merci!!
    C'est vrai que j'avais mélangé C et C++ donc ça faisait un beau bazar.

    J'ai pu modifier cela et ça a marché.

    Merci encore

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

Discussions similaires

  1. Retourner un tableau dans une fonction
    Par oranoutan dans le forum Débuter
    Réponses: 14
    Dernier message: 05/10/2007, 13h39
  2. retour d'un tableau dans une fonction
    Par FlyByck dans le forum Delphi
    Réponses: 3
    Dernier message: 19/01/2007, 00h00
  3. Réponses: 1
    Dernier message: 28/12/2006, 17h02
  4. [langage] appel d'un tableau dans une fonction
    Par donny dans le forum Langage
    Réponses: 11
    Dernier message: 13/11/2006, 16h17
  5. Accéder à un tableau dans une fonction
    Par valanagrid dans le forum C++
    Réponses: 10
    Dernier message: 18/09/2006, 16h08

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