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 :

chaines


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Par défaut chaines
    slt
    g un pt pb de chaines....

    imaginons que je veuille stocker des numéros ds un tablo;
    je demande d'entrer un nbre,et je le stock ds un emplacemt
    d'un tablo de nbre définit au préalable.
    Puis je mets le tout ds une boucle, etc etc

    Maintenant, je voudras faire de même avec des noms. Je sais que je peux stocker une chaine ds un pointeur, créer un tableau de
    pointeur. Le pb, c qu'il me faudrait ds ce cas avoir au préalable définit la chaine contenue ds chaque pointeur.

    Comment faire pour demander le nom, puis le stocker ds un pointeur ?

    g cru comprendre que les fonctions scanf et gets ne permettent de stocker une chaine que dans un tableau....

    g essayé avec les deux et ça ne marche pas pour un pointeur,
    (g un warning et un mssg d'erreur, que ce soit en stockant la chaine
    ds la valeur droite ou la gauche du pointeur)
    si qq peut m'expliquer comment procéder

    merci

  2. #2
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut code
    Montre nous ton code!

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut Re: chaines
    Citation Envoyé par drKzs
    slt
    g essayé avec les deux et ça ne marche pas pour un pointeur,
    (g un warning et un mssg d'erreur, que ce soit en stockant la chaine
    ds la valeur droite ou la gauche du pointeur)
    si qq peut m'expliquer comment procéder
    merci
    Tant que tu y es montre nous aussi cela 8)

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Par défaut
    bof, rien de spé, g voulu faire un test genre:

    char *nom ;
    puts("entre ta chaine");
    > scanf("%s", nom);
    > scanf("%s", *nom);

    idem avec gets (nom) et gets (*nom)

    mais qd je veux l'afficher ça merde:
    > warning: using gets is dangerous, and should not be used
    > erreur: passing arg1 of gets makes pointer from integer without a cast

    je suis bien conscient que mon approche n'est pas terrible, mais je débute
    dc expérimente....

    merci de votre indulgence, et pour vos solutions

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 35
    Par défaut
    déjà t'as rien alloué à la base ...
    donc c'est pas bon,
    char* nom t'as juste un pointeur

    donc soit tu fais un buffer :
    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
     
    #define TAILLE_BUFFER 1024
    char MonBuffer[TAILLE_BUFFER]
    char *pNom;
     
    // on utilise fgets pour éviter les buffer overflow, gets() est à bannir
    fgets(stdin, MonBuffer, TAILLE_BUFFER-1); // a vérifier, ça fait longtemps que je n'ai pas utilisé
     
    // et ensuite tu travailles avec ton buffer
    pNom = MonBuffer; // on se place en début de buffer
    while(/*test*/)
    {
         // ton code
    }
     
    printf("%s \n", pNom); // affiche le nom lu
    en tous cas évite "scanf("%s", *nom); " car nom pointe sur ton premier élément
    et scanf est une fonction que je n'apprécie pas particulièrement !

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Par défaut
    alloué à la base......hum hum, sur tout ce ke g lu sur les pointeurs je n'avais pas encore vu qu'il fallait définir encore autre chose...

    Je débute en c dc j'essaye d'apprendre de la manière la plus simple, quitte à agrandir par la suite mon repertoire de fonctions et de techniques.....
    Je travaille les tableaux et les pointeurs, et je me demandais comment créer un tableau de chaine, comme g crée des tableaux de nbrs, de char, et de pointeurs....

    j v tacher d'y voir plus clair


    merci pour ta réponse

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 35
    Par défaut
    un tableau de chaines ou une chaines de caractères (= un tableau de caractères) ??

    un tableau de chaines c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define NB_CHAINES    12  // on va stocker 12 chaines
    #define TAILLES_CHAINES    128  // taille maximale de mes chaines
    char MonTableau[NB_CHAINES][TAILLES_CHAINES]
    et là t'as un tableau de chaines où la mémoire est allouée (donc tu ne risque pas de crasher le système en écrivant n'importe où)

    après tu peux faire joujou avec des pointeurs sur des chaines (char * ou char ** ensuite) mais fait toujours attention à travailler dans des espaces mémoires allouées !!! (il n'y a pas de barrières de sécurité en C)

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Par défaut
    ok, merci, je v voir si je m'en sors

    sympa d'avoir persévéré

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 35
    Par défaut
    de rien, et tu verras ce n'est pas très compliqué tout ça avec de l'habitude

    tout ce qu'il faut c'est être rigoureux, propre, et commenter le code !!!
    bon courage

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

Discussions similaires

  1. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  2. Réponses: 2
    Dernier message: 10/07/2002, 11h51
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Réponses: 3
    Dernier message: 12/06/2002, 21h15
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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