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 :

tableau de chaine de caractere avec pointeur


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Points : 23
    Points
    23
    Par défaut tableau de chaine de caractere avec pointeur

    j'ai le programme suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<iostream.h>
    #include<iomanip.h>
    int main()
    {
        char *t;
        int i=0;
        cin>>t[i];
        i++;
        for(int j=0;j<i;j++)
            cout<<t[i];
        return 0;
    }
    comment faire pour avoir un tableau de chaine de caractere avec pointeur

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Voici un code dans un C++ moderne équivalent à tes intentions:
    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
     
    #include <iostream>
    #include <string>
     
    int main()
    {
    std::string t;
    std::cin >> t;
     
    const int N=t.size();
    for(int i=0;i<N;i++)
    {std::cout<<t[i];}
     
    return 0;
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Points : 23
    Points
    23
    Par défaut

    non je travaille avec le c++ reguilier non moderne
    quelqu un peut m aider a propos tableau de chaine de caractere avec pointeur

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    non je travaille avec le c++ reguilier non moderne
    Le C++ "régulier", c'est le C++ moderne.
    Ton code n'est pas même pas valide d'après le standard C++ de 1998 (le premier standard et celui toujours en vigueur) ; ce n'est certainement pas du "vrai" C++.

    quelqu un peut m aider a propos tableau de chaine de caractere avec pointeur
    Pour lire dans un tableau de caractères de taille fixe, tu peux soit lire caractère par caractère, soit lire un buffer de taille fixe avec les fonctions de lecture binaire.
    Mais bon, qu'est-ce qui te gêne dans l'utilisation de std::string ? Tu peux en extraire un const char* au besoin.

  5. #5
    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
    sinon si tu veux des réponses sur l'utilisation de char*, il faut se tourner vers le C. ( pas ++ ).

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Nan, le C++ permet aussi ce genre de chose.
    Mais c'est totalement idiot de le faire alors qu'il propose des outils bien plus puissants et robustes à la place.

  7. #7
    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
    L'utilisation de std::string est la bonne solution.
    Cependant, pour répondre à ta question:
    Ici, tu déclare un pointeur sur char, mais tu ne l'initialise à aucune valeur. Donc il ne pointe pas sur une zone valide.
    Tu as deux solutions. Soit tu utilises une zone mémoire sur la pile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char t[TAILLE_MAX];
    Il faut faire attention à 2 choses: la mémoire est 'libérée' lorsque la variable est détruite (sort de sa portée). Lorsque la pile n'est plus assez grande pour contenir la zone que tu as réservé, alors tu as un dépassement de pile dont tu ne peux maîtriser les conséquences.

    La seconde solution est d'utiliser une zone mémoire sur le tas: l'allocation dynamique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *t = new char[TAILLE_MAX];
    Il faut ensuite libéré cet espace mémoire avec un delete []t;
    L'utilisation de la mémoire dynamique est chose délicate et qui demande une certaine expérience de développement. C'est pourquoi elle n'est pas recommandé au débutant.

    Donc, en reprenant le code que tu nous avais fourni, une solution peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include<iostream>
    int main()
    {
    // taille du tableau
       const size_t TAILLE_MAX=255;
    // déclaration du tableau: on réserve la place nécessaire
       char t[TAILLE_MAX];
    // lecture de la chaine en entrée:
       std::cin>>t;
    // ecriture de la chaine en sortie:
       std::cout<<"Chaine saisie: "<<t<<std::endl;
       return 0;
    }
    Attention, si une chaîne de plus de 255 caractères est saisie, le programme plante car on déborde le tableau. Déborde: on écrit au delà de la zone que l'on a déclaré réservée.

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       char t[TAILLE_MAX];
    // lecture de la chaine en entrée:
       std::cin>>t;
    Buffer overflow, génial...

Discussions similaires

  1. Tableau de chaînes de caractères
    Par mouradj2006 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 13/12/2017, 10h47
  2. [Tableaux] tableau de chaine de caractere
    Par Tempotpo dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2006, 13h54
  3. cmt inserer une chaine de caractere avec apostrophe
    Par dipajero dans le forum Oracle
    Réponses: 1
    Dernier message: 13/04/2006, 22h27
  4. Réponses: 2
    Dernier message: 05/12/2005, 13h05
  5. chaine de caractere avec virgule dans Insert
    Par Sylvain245 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/11/2005, 12h56

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