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 string (suite)


Sujet :

C++

  1. #1
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut Tableaux de string (suite)
    Re-Bonjour,

    Je reviens sur mon problème de tableau.
    Vos informations m'ont permi de gratter un peu dans ma doc. et j'en suis arrivé à écrire le code de cette façon là:

    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
     
    #include <iostream>    //cout
    #include <stdio.h>      //printf
    #include <vcl.h>        //bibliothèque de Borland
     
    using namespace std;   //pour utiliser la classe standard sans avoir à spécifier std::
     
    void Cartes::distribution(){     
     
    string jeux[] = {"ABCDE","01AT4","022T0","033T0"};
     
            cout << " Verification avec 'cout'"<< endl;
            cout << "  jeux 0 = " << jeux[0] << endl;
            cout << "  jeux 1 = " << jeux[1] << endl;
            cout << "  jeux 2 = " << jeux[2] << endl;
            cout << "  jeux 3 = " << jeux[3] << endl;
     
            printf ("\n Verification avec 'printf'.\n");
            printf ("  jeux[0] = %s \n",jeux[0]);
            printf ("  jeux[1] = %s\n",jeux[1]);
            printf ("  jeux[2] = %s\n",jeux[2]);
            printf ("  jeux[3] = %s\n\n",jeux[3]);
            printf ("  pointeur en Hexa = %p \n",*jeux);
            printf ("  pointeur en decimal = %d \n",*jeux);
    }
    J'obtiens les mêmes résultats avec cout et printf, sachant que:
    %s -> spécificateur de format pour chaînes de caractères.
    %p -> spécificateur de format pour pointeur (en hexa).
    %d -> spécificateur de format pour décimal.
    etc... (il y en a d'autres)


    Comment ce fait-il donc, que je puisse quand même utiliser printf ?
    Est-ce dû au fait que je fonctionne sous Builder 6 avec la bibliothèque de Borland vcl ou est-ce standard avec C++ ?

    merci et @++

    Claude

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    La bibliothèque standard du C est incluse dans celle du C++.
    Mais le mieux en C++, ce sont les flux

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Je pense que l'utilisation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("  jeux[0] = %s \n",jeux[0]);
    est une grossière erreur.

    Cela fonctionne pour l'instant mais je pense qu'il est clairement indiqué que le type std::string n'est pas obligé de gérer de manière contiguë les caractères qui composent la chaine de caractères.

    Donc pour moi celà fonctionne pour l'instant car le tableau alloué par défaut est assez grand pour contenir tes caractères mais si jamais il y a une réallocation pour agrandir la taille tu risques d'avoir des surprises.

    Si tu veux vraiment utiliser printf, alors utilise la méthode .c_str() de std::string pour obtenir un pointeur sur une chaine de caractères contigüe, mais, comme tu l'as déja entendu plusieurs fois et que je vais encore répéter, printf en C++ c'est fini!

  4. #4
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut
    Bonjour,

    à tous pour ces excellentes informations.

    A vous relire une prochaine fois. (j'ai encore beaucoup de lacunes... )

    Claude

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

Discussions similaires

  1. [VB.NET] Comment comparer 2 tableaux de string
    Par vijeo dans le forum VB.NET
    Réponses: 4
    Dernier message: 04/12/2007, 20h59
  2. Réponses: 0
    Dernier message: 22/08/2007, 09h11
  3. [Tableaux] Query Strings 2-probs
    Par MrBean02 dans le forum Langage
    Réponses: 6
    Dernier message: 16/07/2007, 10h07
  4. tableaux de String dans un vector
    Par aymanouch dans le forum Langage
    Réponses: 2
    Dernier message: 08/04/2007, 12h04
  5. [Tableaux] Un string est-il un booléen ? Abhération
    Par Juxener dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2006, 14h09

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