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 :

Tableaux de caractères


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 42
    Points : 35
    Points
    35
    Par défaut Tableaux de caractères
    Bonjour,

    Je souhaiterais avoir un tableau dynamique contenant des noms en étant plus limité seulement à 255 caractères comme sur cet exemple:
    char tabtemp[256][256];

    Pour des nombres j'y arrive comme ceci:
    int M;
    float *tabnbr = new float[M];

    Avec en utilisation par exemple:
    M=1;
    tabnbr[M]=2;


    Mais pour les caractères je n'y arrive pas.

    Pourriez vous m'indiquer la solution ?


    Un grand merci pour vos réponses !

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Les vectors offrent beaucoup plus de souplesse que des tableaux classiques même alloués dynamiquement.

    EDIT:sinon où est le probleme?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Utilise std::vector pour les tableaux dynamiques, et std::string pour les chaînes de caractères.

    Voir dans la FAQ C++

  4. #4
    Membre actif Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Points : 219
    Points
    219
    Par défaut
    Il me semble qu'une liste ou un vecteur de string ferait bien l'affaire.

    list<string> listeNoms;

    A+
    .:: WOTC_MasterMind | Never Surrender | Warriors of The Cross ::.
    Il n'y a qu'une façon d'échouer, c'est d'abandonner avant d'avoir réussi.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Bon alors pour la déclaration avec vector c'est OK.

    Par contre le strcpy ne fonctionne pas, sachant que je veux enregistrer File.cFileName dans ma variable tabvector.

    Il faut utiliser quoi à la place ? avec un ptit exemple ce serait nickel

  6. #6
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    Pour copier deux strings simplement faire ça :
    Pas besoin de fonction à la strcpy(), strcmp(), etc. C'est ça l'avantage des std::string, un fonctionnement simple et intuitif.
    Fiquet
    - FAQ SDL
    - FAQ C++

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<string> t;
    t[1]="abcd";
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Effectivement c'est bien sympa(ça va me servir pour d'autres choses) par contre pour mon cas présent c'est du File.cFileName de windows.h qu'il faut que j'enregistre dans mon vector.

    Et lui, il est déclaré comme cela:
    CHAR cFileName[ MAX_PATH ];

    Ca sent la conversion de type non ?

  9. #9
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    Toutes les conversions sont dans la FAQ.

    http://c.developpez.com/faq/cpp/?pag...INGS_from_char
    Fiquet
    - FAQ SDL
    - FAQ C++

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    J'ai appliqué la faq:
    tabname.assign(File.cFileName);

    Et j'ai en erreurs:
    Impossible de trouver une correspondance pour '_STL::vector<_STL::string,_STL::allocator<_STL::string> >::operator =(char *)'

    Impossible de convertir '_STL::string' en 'char *'


    Je ne comprend pas pourquoi il est question de string vers char* puisque cFileName est de type Char et que je souhaite l'enregistrer dans mon vector.

    J'ai raté un épisode ?

  11. #11
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    Essaye un truc comme ça peutetre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    std::vector<std::string> tabName;
    ...
    tabName.push_back(std::string(File.cFileName)); // Ajout dans tabName
    ...
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  12. #12
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Sinon il y a la bonne vieille methode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char ** tabtemp;
    int nb_noms, taille_noms, i;
     
    tabtemp = new char* [nb_noms];
    for(i=0; i<nb_noms; i++)
      tabtemp[i] = new char[taille_noms];
    et apres tu accedes a tes noms en utilisant tabtemp[index_nom]

  13. #13
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par barthelv
    Sinon il y a la bonne vieille methode:[...]
    Justement non elle n'est pas bonne. Cf la FAQ (tableaux à plusieurs dimensions) pour la bonne méthode manuelle.

    Sinon, je sens que le message d'erreur réflète un truc comme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void f(char*);
    void g(const char*);
    ...
    std::string chaine;
    f(chaine); // (1)
    g(chaine); //(2)
    Le cas (2) est censé s'écrire:
    qui est dans la FAQ !!

    Pour le cas (1), il y a :
    - soit une erreur dans le prototype de f -- il est commun de croiser des codes tiers pondus par des gens qui se fichent de la const-correction, ou qui en ignorent tout simplement l'existance. Dans cette optique, le prototype de g serait en revanche correct.

    - soit un mélange car f voudrait vraiment modifier le contenu de la chaine reçue. Mais alors là, il peut y avoir un risque de buffer overflow, cf les strcpy/strncpy, ... Dans ce cas, il faudrait soit réécrire f pour la rendre plus sûre en la basant sur des std::string, soit copier la chaine dans un buffer modifiable suffisament dimensionné pour survivre à la modification opérée dans f.
    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...

Discussions similaires

  1. Traitement tableaux de caractères de longueur fixe
    Par masoum dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 31/10/2012, 07h34
  2. Tableaux de caractères
    Par Westminster dans le forum Débuter
    Réponses: 1
    Dernier message: 20/11/2011, 19h40
  3. Réponses: 6
    Dernier message: 07/07/2011, 20h53
  4. conjugaison => tableaux de caractères & ERREURS
    Par darkwall_37 dans le forum C
    Réponses: 7
    Dernier message: 25/11/2007, 15h36
  5. [Tableaux] remplacer caractère '
    Par robert_trudel dans le forum Langage
    Réponses: 1
    Dernier message: 01/10/2006, 03h53

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