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 :

[DEBUTANT] String et char, bug


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut [DEBUTANT] String et char, bug
    Bonjour,

    J'essaye de faire un script pour l'école. Je suis en première année d'info et j'ai pas vu beaucoup de chose en C++ (je suis aux pointeurs pour le moment) et je bug sur un script tout on :

    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
    42
     
    #include <iostream>
    #include <string.h>
    using namespace std;
     
    const int tailleCodeRevue=4;
    const int tailleMaxTitre=100;
     
    typedef
      struct
        {
          char codeRevue[tailleCodeRevue];
          int annee,mois;
          char titre[tailleMaxTitre];
        } Article;
     
    void lireArticle (Article &art)   // R
    {
      string s;
      cout << "Entrez le titre de l'article :\n";
      getline(cin,s);
      art.titre=s;
      cout << "Entreze le code de la revue (3 lettres) :\n";
      cin >> s;
      art.codeRevue=s;
      cout << "Entrez l'année de l'article :\n";
      cin >> art.annee;
      cout << "Entrez le mois de l'article :\n";
      cin >> art.mois;
    }
     
    void afficherArticle (Article art) // D
    {
      cout << "*\t" << art.codeRevue << "\t" << art.mois << "/" << art.annee << "\t" << art.titre << endl;
    } 
     
    int main ()
    {
      Article art;
      lireArticle(art);
      afficherArticle(art);
    }
    Donc le problème se situe à la ligne :
    Où il me marque une erreur ainsi qu'à la ligne :
    Il me dit :
    21 ~\articles.cc incompatible types in assignment of `std::string' to `char[100]'
    et pour la seconde :
    21 ~\articles.cc incompatible types in assignment of `std::string' to `char[4]'

    Je ne comprends pas d'où vient l'erreur surtout que c'est le prof qui nous a dit de faire ça

    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
    La conversion tableau statique (et autres pointeurs sur char) de char vers std::string est implicite via un des constructeurs de std::string ou un des opérateurs d'affectation.
    Dans l'autre sens, retour à la case C avec les strncpy. Cf la FAQ.

    Le code mélange allègrement C et C++ ... il vaudrait mieux faire un choix. Je ne vois pas l'intérêt de se limiter à une taille fixe dans la structure -- à part à se brider suivant trois axes. Mais bon...
    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
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    merci j'ai lu mais je comprends pas et comme je comprends pas le code je peux pas l'utiliser y a pas un truc plus simple ? pour pas que mon prof se demande quoi...?

  5. #5
    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
    Citation Envoyé par FinalSpirit
    y a pas un truc plus simple ?
    Si. Ne pas utiliser de tableaux statiques ou autres char*. Si tu veux mélanger, il n'y a pas plus simple. Et si le code de ton prof était vraiment tel que tu le disais, alors son code était faux, ne pouvant en aucun cas compiler.
    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...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    C'est celui ci sans problème... je vais devoir lui dire deux mots
    JE peut pas faire directement un :
    cin >> art.CodeRevue;

    Au moins ce que saisit la personne est directement mis dans la variable....

  7. #7
    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
    Tu pourrais mais ... cela serait la porte ouverte aux buffer overflows.
    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...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    et je viens de tester ça marche pour le code car c'est 3 lettres mais pour le titre ça passe pas car c'est une phrase et rentré une phrase dans une variable de type caractère c'est dur

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    Une info complémentaire, c'est spécifié sur le sujet que 'on utilise le codage des chaines de C pas du C++

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    956
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 956
    Par défaut
    Dans ce cas, il ne faut pas utiliser string mais des char*.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    J'ai trouvé

    Bon en effet c'est pas simple de trouver quand on connait tout du C mais bon à mon niveau pour palier le problème je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      string s;
      cout << "Entrez le titre de l'article :\n";
      getline(cin,s);
      for (int i=0; i<tailleMaxTitre; i++)
        art.titre[i]=s[i];
      art.titre[s.length()]='\0';
    Et bon ça marche
    Voilà, ben merci quand même, grâce à vos explication j'ai bien compris l'erreur et j'ai pu la résoudre à mon niveau

  12. #12
    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
    strncpy !! ou encore std::string::copy (si mes souvenirs sont bons).
    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...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    On a pas le droit d'utilisé ce qu'on a pas encore vu... strncpy ça me dit vraiment rien donc... :sic:

  14. #14
    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
    Vu comme ça, c'est sûr.
    Au fait, et si la taille de ta chaine est inférieure à tailleMaxTitre ?
    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...

  15. #15
    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
    Tu utilises string, donc vous l'avez vu. Pourquoi utiliser des tableaux de char alors ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const int tailleCodeRevue=4; 
    const int tailleMaxTitre=100; 
     
    typedef 
      struct 
        { 
          char codeRevue[tailleCodeRevue]; 
          int annee,mois; 
          char titre[tailleMaxTitre]; 
        } Article;
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef 
      struct 
        { 
          string codeRevue; 
          int annee,mois; 
          string titre; 
        } Article;
    note que "struct Article {};" peut remplacer "typedef struct {} Article;"

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    C'est le prof qui impose cela... je sais pas pourquoi et je sais que c'est con de sa part mais bon...

Discussions similaires

  1. [Debutant]compter un char dans un string
    Par Lafab dans le forum Langage
    Réponses: 3
    Dernier message: 09/04/2008, 14h33
  2. [debutant] comparer un char et un string
    Par xiaopp dans le forum Langage
    Réponses: 4
    Dernier message: 16/04/2007, 18h35
  3. [debutant] Comment convertir un string en char
    Par jbidou88 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 04/05/2006, 12h58
  4. [Debutant]String en tableau de char
    Par amel2006 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 05/03/2006, 10h33
  5. [Debutant(e)]limitation du String 65536 char
    Par srane dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 28/05/2004, 23h42

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