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 :

le type " char* " ne fonctionne pas correctement


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut le type " char* " ne fonctionne pas correctement
    Bonjour
    je cherche d'avoir comment utilisez un pointeur sur un caractère pour utilisez
    les chaines de caractère
    j'ai utilises ce type dans un tableau et dans une liste chainées
    mais dans l'affichage if affiche des résultats faux
    voici un exemple d'utilisation dans une tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include<iostream.h>
    #include<conio.h>
    void main(){
    char* k[5];
    int i;
    for(i=0;i<5;i++)
    cin>>k[i];
    for(i=0;i<5;i++)
    cout<<"\n"<<k[i];
    getch();
    }
    rem : j'utilise turbo c++ .

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Tu as créé un tableau de pointeurs vers des caractères, et non un tableau de caractères.
    Petit rappel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char k[5]; // tableau de 5 caractères
    char *k; // pointeur vers un caractère ou une chaine de caractères
    char *k[5]; // tableau de 5 pointeurs vers des caractères (ou chaines de caractères).
    Je ne sais pas trop ce que tu cherchais à obtenir dans ton exemple, mais d'après moi, tu devrais te replonger dans un bouquin ou un tuto sur les pointeurs et les tableaux en C++ (ou en C, le cas présent c'est correct aussi).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    merçi phi1981
    je cherche d'obtenir un tableaux du chaine de caractère
    comme l'exemple

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    un pointeur sur char pour contenir une chaîne (tableau) de caractères doit être alloué.
    Puisque tu es en C++, et que ton niveau est faible, favorise les string.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    A vrai dire, ce n'est pas le type char* qui ne fonctionne pas correctement, c'est toi qui n'utilises pas correctement le type char *

    Outre les explications de phi1981, n'oublies pas que le pointeur (ou un pointeur de pointeur) n'est jamais qu'une variable numérique qui est sensée représenter une adresse en mémoire, mais qu'il faut que cette adresse mémoiresoit valide.

    Ainsi, dans l'état actuel de ton code, lorsque tu fera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=0;i<5;i++)
        cin>>k[i];
    tu cours d'énormes risques de "tout faire pêter", parce que k[i] est, a priori, une adresse qui n'est absolument pas valide

    Pour t'éviter bien du soucis, l'idéal reste d'utiliser la classe "prévue par le standard" pour la gestion des chaines de caractères ainsi que pour la gestion de tableau:

    La classe string, disponnible dans l'espace de noms std par simple inclusion du fichier d'en-tête <string> t'évitera bien des problèmes pour la gestion de chaines de caractères, et la classe vector, elle aussi disponnible dans l'espace de noms std, mais par inclusion du fichier d'en-tête <vector>, cette fois, te facilitera grandement la gestion d'ensemble contigus d'éléments
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Citation Envoyé par koala01 Voir le message
    La classe string, disponnible dans l'espace de noms std par simple inclusion du fichier d'en-tête <string> t'évitera bien des problèmes pour la gestion de chaines de caractères, et la classe vector, elle aussi disponnible dans l'espace de noms std, mais par inclusion du fichier d'en-tête <vector>, cette fois, te facilitera grandement la gestion d'ensemble contigus d'éléments
    Visiblement, il utilise un compilateur qui date d'avant le standard (cf. iostream.h). Je suspecte que le turbo c++ dont il parle est la version DOS (cf. conio.h). Donc pas sûr qu'il ait accès aux namespaces ou à la classe string.
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    turbo c++ n'utilise pas le namespace std

    est ce que il-y-à d'autre solution

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par loulid39 Voir le message
    turbo c++ n'utilise pas le namespace std

    est ce que il-y-à d'autre solution
    oui...

    Utiliser un compilateur un tantitnet à jour, et un EDI un peu plus récent

    Tu peux, par exemple, te diriger vers code::blocks (fournis avec une version relativement récente de Gcc, compilée pour tourner sous windows ) ou vers de visual studio express (pour ne parler que des outils gratuits )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par koala01 Voir le message
    oui...

    Utiliser un compilateur un tantitnet à jour, et un EDI un peu plus récent

    Tu peux, par exemple, te diriger vers code::blocks (fournis avec une version relativement récente de Gcc, compilée pour tourner sous windows ) ou vers de visual studio express (pour ne parler que des outils gratuits )
    merçi
    mais je ne peut pas faire ça
    parceque je suis un étudient en informatique
    et j'ai un TP a faire en c++ . l'ensigniant ne dit d'utilisez turbo c++
    et d'utilisez avec le manipulation des chaines du caractere (char*) pas ( char nom[15]) par exemple .

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    char* et char[15] sont tous deux des chaînes de caractères.

    Il n'empêche que ton problème initial est toujours celui de l'allocation de mémoire de ta chaîne.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par loulid39 Voir le message
    merçi
    mais je ne peut pas faire ça
    parceque je suis un étudient en informatique
    Cela n'empêche qu'il faille pouvoir faire preuve d'un minimum de jugement
    et j'ai un TP a faire en c++ . l'ensigniant ne dit d'utilisez turbo c++
    Il faudrait peut etre lui faire remarquer que turbo C date de Matuzalem, et que Le C et le C++ ont énormément évolué depuis l'époque où cet EDI est sorti (c'est bien simple, il date d'avant la première standardisation de C++, qui remonte quand meme à 1998, et qui a été suivie par une seconde en 2003 et par un "Technical Report" en 2005 )... Sans parler de la norme qui est sortie l'année passée et qui est en cours de mise en place chez tous les distributeurs de compilateurs
    et d'utilisez avec le manipulation des chaines du caractere (char*) pas ( char nom[15]) par exemple .
    Et lui faire remarquer que, bien qu'il soit possible de compiler du code C avec un compilateur C++, il s'agit de deux langages totalement différents, qui ne partagent qu'une partie de leur syntaxe!!!

    S'il veut vous apprendre à manipuler des char*, libre à lui... Mais, bon sang, qu'il le fasse dans le cadre d'un cours de C et non dans celui d'un cours de C++ :devil:

    C++ fournit énormément de choses qui permettent de se faciliter la tache, entre autre pour tout ce qui a trait à la gestion dynamique de la mémoire, avec sa chaine de caractères et ses différents conteneurs.

    Il devrait vraiment vous habituer à travailler avec ces différents types, et ne voir le problème des pointeurs qu'une fois qu'il aborde celui de l'héritage public et du polymorphisme
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Fonction Quoted printable qui ne fonctionne pas.
    Par leCcsympas dans le forum C
    Réponses: 3
    Dernier message: 13/01/2007, 18h54
  2. Le débogage ne fonctionne pas correctement
    Par BNS dans le forum Visual C++
    Réponses: 4
    Dernier message: 13/07/2006, 13h59
  3. Réponses: 13
    Dernier message: 31/08/2005, 14h03

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