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 :

Problème de structure


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut Problème de structure
    Voici le code de la structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct Trame
    {
    	char AdresseDuModule[2];
    	char Fonction[2];
    	char AdresseDuRegistre[4];
    	char EtatDuVentilateur[4];
    	char Checksum[4];
     
    }st_Trame;
    Voici le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void main()
    {
    	char ChaineRecue[17] = "030600020001E828";
    	st_Trame* MaTrame;
    	MaTrame = (st_Trame*) ChaineRecue;
           cout << "%s" << MaTrame->AdresseDuModule << endl;
     
    }
    Je sais, c'est un petit programme tout bête mais j'utilise tout cela dans un programme beaucoup plus gros.

    Bref, mon problème est, quand j'affiche AdresseDuModule, cette variable contient toute la chaine (030600020001E828) et non ce que je veux (03).

    Comment puis-je régler ce petit problème ?

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Et le 0 teminal de tes chaines, il se met tout seul ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Ah ... je viens de comprendre ^^

    Mais pourtant, j'ai déjà utilisé ce code est il n'y avait aucun problème (enfin c'est un vague souvenir)

    mais comment je peux le mettre le '\0' à la fin de chaque chaine ?

    EDIT : Voir commentaire dans le 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
    25
     
    typedef struct Trame
    {
    	char AdresseDuModule[2];
    	char Fonction[2];
    	char AdresseDuRegistre[4];
    	char EtatDuVentilateur[4];
    	char Checksum[4];
     
    }st_Trame;
     
    void main()
    {
    	char ChaineRecue[17] = "030600020001E828";
    	st_Trame* MaTrame;
    	MaTrame = (st_Trame*) ChaineRecue;
     
    	cout << "\n" << MaTrame->AdresseDuModule << endl; // doit contenir "03"
    	cout << "\n" << MaTrame->Fonction << endl; // doit contenir "06"
    	cout << "\n" << MaTrame->AdresseDuRegistre << endl; //doit contenir "0002"
    	cout << "\n" << MaTrame->EtatDuVentilateur << endl; // doit contenir "0001"
    	cout << "\n" << MaTrame->Checksum << endl; //doit contenir "E828"
     
     
    }
    Résultat obtenu :

    030600020001E828

    0600020001E828

    00020001E828

    0001E828

    E828

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    à part le std::cout, c'est 100% C et non C++ ton code

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par nikko34
    à part le std::cout, c'est 100% C et non C++ ton code
    Je me suis surement trompé de section mais personne n'a de solution(s) pour ce problème qui est tout bête je suis sûr mais que j'arrive pas à résoudre ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    Citation Envoyé par Nemesis007
    Je me suis surement trompé de section mais personne n'a de solution(s) pour ce problème qui est tout bête je suis sûr mais que j'arrive pas à résoudre ?
    à mon avis, ne fait pas comme ça mais utilise les fonctions de string.h pour découper ta chaîne en morceaux et les mettre où il faut. Il faut qu'à la fin de chaque chaîne de charactère, il y ait une place libre pour mettre un "\0".

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Ok merci, je vais tester cette solution

  8. #8
    Membre régulier Avatar de gelam
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 69
    Points : 74
    Points
    74
    Par défaut
    Bonjour,
    Pour ma part je pense que si on passe au C++ on doit éviter les char du C et utiliser les string du C++.
    Tant qu'à faire on peut faire une classe qui emballe tout ça.
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #include <iostream>
    #include <string>
    using namespace std ;
     
    class Trame{
    public:
    	Trame( string chainerecue ){
    		adresseDuModule = chainerecue.substr(0,2) ;
    		fonction = chainerecue.substr(2,2) ;
    		adresseDuRegistre = chainerecue.substr(4,4) ;
    		etatDuVentilateur = chainerecue.substr(8,4) ;
    		checksum = chainerecue.substr(12,4) ;
    	}
     
    	string getAdresseDuModule(){return adresseDuModule;}
    	string getFonction(){return fonction;}
    	string getAdresseDuRegistre(){return adresseDuRegistre;}
    	string getEtatDuVentilateur(){return etatDuVentilateur;}
    	string getChecksum(){return checksum;}
     
     
    private:
    	string adresseDuModule;
    	string fonction;
    	string adresseDuRegistre;
    	string etatDuVentilateur;
    	string checksum;
    };
     
    int main()
    {
    	Trame trame("030600020001E828");
     
    	cout << trame.getAdresseDuModule() << endl ;
    	cout << trame.getFonction() << endl ;
    	cout << trame.getAdresseDuRegistre() << endl ;
    	cout << trame.getEtatDuVentilateur() << endl ;
    	cout << trame.getChecksum() << endl ;
    	return 0 ;
    }

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    entièrement d'accord gelam mais il n'a jamais dit qu'il voulait passer au C++..

    sinon pour tes get tu peux renvoyer des const std::string &. Et mettre les fonctions const.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const std::string & getChecksum() const
    {
      return checksum;
    }
    et le param du constructeur aussi, comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Trame( const std::string & chainerecue )
    {
    ...
    }

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par nikko34
    entièrement d'accord gelam mais il n'a jamais dit qu'il voulait passer au C++..

    sinon pour tes get tu peux renvoyer des const std::string &. Et mettre les fonctions const.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const std::string & getChecksum() const
    {
      return checksum;
    }
    et le param du constructeur aussi, comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Trame( const std::string & chainerecue )
    {
    ...
    }
    Je vais essayer vos 2 solutions en espérant que cela marche (ce qui ne m'étonnerait pas )

Discussions similaires

  1. Problème de structure "récursive"
    Par Pxnet dans le forum C
    Réponses: 5
    Dernier message: 21/01/2007, 17h20
  2. Problème de structures
    Par Zikas-r dans le forum C
    Réponses: 6
    Dernier message: 27/12/2006, 00h01
  3. Réponses: 16
    Dernier message: 21/08/2006, 14h12
  4. [Structures]Problème sur structures
    Par kendras dans le forum C++
    Réponses: 5
    Dernier message: 07/06/2006, 10h20
  5. [OCaml] Problème de structure/parser
    Par marv1 dans le forum Caml
    Réponses: 4
    Dernier message: 09/05/2005, 12h16

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