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 :

Aide sur les pointeurs + char [Débutant(e)]


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Points : 41
    Points
    41
    Par défaut Aide sur les pointeurs + char
    Salut,

    je me met aux pointeurs et j'aurai besoin de votre aide pour comprendre la raison pour laquelle t[0] n'affiche pas buf .
    Je m'explique je veux saisir un mot dans buf et le mettre ensuite dans mon tableau t.

    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
     
    #include<stdio.h>
    int main(void)
    {
        char * buf;
        char * t;
     
        buf = malloc (sizeof(char[20]));
        t = malloc (100*sizeof(char[20]));
     
        scanf("%s",&buf);
     
        printf("le mot est %s",&buf); 
     
        t[0]=&buf;
     
     
        printf("\n tableau : %s",&t[0]);
     
     
        scanf("%s",&buf);   
     
    }
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Deejoh Voir le message
    je me met aux pointeurs et j'aurai besoin de votre aide pour comprendre la raison pour laquelle t[0] n'affiche pas buf .
    Je m'explique je veux saisir un mot dans buf et le mettre ensuite dans mon tableau t.
    Ce code est très incomplet, voire incorrect. Commence déjà par corriger ça :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:7: warning: implicit declaration of function `malloc'
    main.c:10: warning: char format, pointer arg (arg 2)
    main.c:12: warning: char format, pointer arg (arg 2)
    main.c:14: warning: assignment makes integer from pointer without a cast
    main.c:20: warning: char format, pointer arg (arg 2)
    main.c:22: warning: control reaches end of non-void function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 4 seconds)
    0 errors, 6 warnings
    Si ton compilateur ne dit rien, il mérite une meilleure configuration :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo


    Si j'ai bien compris le but de la chose, tu veux allouer une chaine de 20 et un tableau de chaines de 20...
    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    int main (void)
    {
       char *buf = malloc (20);
       if (buf != NULL)
       {
          char (*t)[20] = malloc (10 * sizeof *t);
          if (t != NULL)
          {
             scanf ("%19s", buf);
             printf ("le mot est %s", buf);
             strcpy (t[0], buf);
             printf ("\n tableau : %s", t[0]);
             free (t), t = NULL;
          }
          free (buf), buf = NULL;
       }
       return 0;
    }
    Pose des questions si tu ne comprends pas.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    A mon avis, cela ne sert a rien d'aller plus loin. Il y a beaucoup trop de lacunes dans ce petit bout de code.
    Il faut revoir les bases, entre autre :
    • les pointeurs
    • les tableaux
    • l'allocation dynamique
    • les chaines de caractères
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par crocodilex Voir le message
    A mon avis, cela ne sert a rien d'aller plus loin. Il y a beaucoup trop de lacunes dans ce petit bout de code.
    Il faut revoir les bases, entre autre :
    • les pointeurs
    • les tableaux
    • l'allocation dynamique
    • les chaines de caractères

    C'est peut être pour ça que j'ai mis [DEBUTANT].
    Je me met aux pointeurs donc il semble normal que je ne connaisse ni l'allocation dynamique ni les pointeurs (sic)...

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Deejoh Voir le message
    C'est peut être pour ça que j'ai mis [DEBUTANT].
    Je me met aux pointeurs donc il semble normal que je ne connaisse ni l'allocation dynamique ni les pointeurs (sic)...
    Je pense que tu te lances dans des choses trop difficiles pour toi si tu ne connais pas les pointeurs (allocations de tableaux de tableau de char, c'est pas trop pour les débutants...)

    Commence par des choses plus simple... Les pointeurs c'est avant tout utile avec les fonctions.
    http://delahaye.emmanuel.free.fr/exo...pointeurs.html
    Résout déjà l'exercice 1, et après, on verra.
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int main (void)
    {
          [...]
    
          char (*t)[20] = malloc (10 * sizeof *t);
    
          [...]
    }
    T'es vache avec lui... Il risque de ne pas s'en remettre...
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par crocodilex Voir le message
    T'es vache avec lui... Il risque de ne pas s'en remettre...
    C'est pourtant exactement ce qu'il veut faire.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Salut,

    Cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char (*t)[20] = malloc (10 * sizeof *t);
    m'est inconnue quelqu'un pourrait il m'expliquer ce qu'est "t".

    D'avance merci

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Montag Voir le message
    Cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char (*t)[20] = malloc (10 * sizeof *t);
    m'est inconnue quelqu'un pourrait il m'expliquer ce qu'est "t".
    Un pointeur sur un tableau de 20 char.

    Cette syntaxe étant assez lourdingue, on utilise plutôt l'alias 'tableau' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef char chaine_a[20];
     
    chaine_a *t = malloc (10 * sizeof *t);
    ca facilite la maintenance.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Ok , je vais regarder ça.
    Merci

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Merci Emmanuel pour ton explication.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Ce code est très incomplet, voire incorrect. Commence déjà par corriger ça :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:7: warning: implicit declaration of function `malloc'
    main.c:10: warning: char format, pointer arg (arg 2)
    main.c:12: warning: char format, pointer arg (arg 2)
    main.c:14: warning: assignment makes integer from pointer without a cast
    main.c:20: warning: char format, pointer arg (arg 2)
    main.c:22: warning: control reaches end of non-void function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 4 seconds)
    0 errors, 6 warnings
    Si ton compilateur ne dit rien, il mérite une meilleure configuration :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo


    Si j'ai bien compris le but de la chose, tu veux allouer une chaine de 20 et un tableau de chaines de 20...
    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    int main (void)
    {
       char *buf = malloc (20);
       if (buf != NULL)
       {
          char (*t)[20] = malloc (10 * sizeof *t);
          if (t != NULL)
          {
             scanf ("%19s", buf);
             printf ("le mot est %s", buf);
             strcpy (t[0], buf);
             printf ("\n tableau : %s", t[0]);
             free (t), t = NULL;
          }
          free (buf), buf = NULL;
       }
       return 0;
    }
    Pose des questions si tu ne comprends pas.


    Merci beaucoup pour ton aide.
    J'ai essayé de compiler ton code mais j'ai cette erreur à la compilation

    invalid conversion from `void*' to `char*' concernant ==>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *buf = malloc (20);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char (*t)[20] = malloc (10 * sizeof *t);
    qu'est-ce t'en penses ?

    MERCI

  13. #13
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Deejoh Voir le message
    Merci beaucoup pour ton aide.
    J'ai essayé de compiler ton code mais j'ai cette erreur à la compilation

    invalid conversion from `void*' to `char*' concernant ==>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *buf = malloc (20);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char (*t)[20] = malloc (10 * sizeof *t);
    qu'est-ce t'en penses ?

    MERCI
    Je penses que tu compiles ton code C avec un compilateur C++ (volontairement ou pas). Fais attention à l'extension du fichier qui doit être .c et non .C ou .cpp ou encore .cxx. La conversion de void * à char * est valide en C, tandis qu'elle ne l'est pas en C++.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Deejoh Voir le message
    Merci beaucoup pour ton aide.
    J'ai essayé de compiler ton code mais j'ai cette erreur à la compilation

    invalid conversion from `void*' to `char*' concernant ==>
    <...>
    qu'est-ce t'en penses ?
    Qu'un programme écrit en C doit être compilé avec un compilateur C.

    Tu devrais vérifier si l'extension de ton fichier source est bien .c et non .C ni .cpp. Visiblement tu n'invoques pas le bon compilateur...
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. aide sur les pointeurs
    Par kenshin64 dans le forum Débuter
    Réponses: 3
    Dernier message: 25/06/2012, 09h05
  2. Besoin d'un peu d'aide sur les pointeurs.
    Par techz dans le forum Débuter
    Réponses: 9
    Dernier message: 18/04/2009, 16h32
  3. Besoin d'aide sur les pointeurs
    Par amateurc dans le forum Ada
    Réponses: 5
    Dernier message: 03/06/2008, 14h58
  4. besoin d aide sur un exercice sur les pointeurs
    Par azumachakib69 dans le forum C
    Réponses: 3
    Dernier message: 28/12/2006, 01h16
  5. Réponses: 4
    Dernier message: 16/11/2006, 02h10

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