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 :

Explication opérateur ->


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut Explication opérateur ->
    Bonjour,
    J'etudie la programmetion pendant mon temps libre, et je suis tombe sur un programme dont je ne comprend pas tou. Je voudrais, si c'est possible, que quelqu'un m'explique les lignes de codes suivantes car je ne comprend pas comment ca marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (d = readdir(dir))
        {
          aff(d->d_name, buf);
        }
    Merci beaucoup d'avance.

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut Re:
    Ton code est incomplet mais on peut supposer que :

    - d est un pointeur sur une structure de type struct dirent
    - dir est un pointeur sur un objet de type DIR, il a été initialisé avec un opendir("MonRep").
    - aff est une fonction d'affichage (?)
    - Il y a un closedir après la boucle.
    - tu inclus le fichier dirent.h (POSIX mais pas ANSI)

    Ouf. Chaque appel à readdir retourne un pointeur sur une entrée du répertoire qu'on a ouvert. Le champ d_name d'une entrée indique le nom de cette dernière.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    merci pour cette explixation.

    Mais je ne saisis pas ceci :

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Yodan Voir le message
    merci pour cette explixation.

    Mais je ne saisis pas ceci :
    C'est dans ton cours de C, chapitre structures.

  5. #5
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par Yodan Voir le message
    merci pour cette explixation.

    Mais je ne saisis pas ceci :
    je l'ai deja expliqué, lorsqu il s agit d'un pointeur sur un structure on utiliser pas le . pour acceder aux sous variables, mais ->.
    exemple :

    si on fait ca :
    alors tu peux faire ca :
    mais si tu decalre d comme pointeur :
    alors faudra faire ca obligé :

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par siegfried64 Voir le message
    je l'ai deja expliqué, lorsqu il s agit d'un pointeur sur un structure on utiliser pas le . pour acceder aux sous variables, mais ->.
    exemple :

    si on fait ca :
    alors tu peux faire ca :
    mais si tu decalre d comme pointeur :
    alors faudra faire ca obligé :
    Oui, au niveau de la syntaxe. Mais dans notre contexte, on n'écrira jamaiscar la fonction readdir retourne un pointeur sur un struct dirent.

    EDIT : Si on a un pointeur p sur une structure, rien n'empêche d'écrire (*p).champ à la place de p->champ. En pratique on n'utilisera pas la première forme.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    J'aurais du mettre tout le code ca aurait ete plus simple.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <sys/types.h>
     
    void    aff(char *file, struct stat buf)
    {
      struct stat sts;
      struct dirent *dirent;
     
      printf(" %s\n", file);
      printf(" %lu", sts.st_size);
      return;
    }
     
     
    void    read_folder(DIR *dir)
    {
      struct dirent *d;
      struct stat buf;
      struct stat sts;
     
      while (d = readdir(dir))
        {
          aff(d->d_name, buf);
        }
    }
     
    int     main(int argc, char **argv)
    {
      DIR *dir;
     
      if (argc != 2)
        {
          printf("ERROR", argv[0]);
          return(-1);
        }
      if ((dir = opendir(argv[1])) == NULL)
        {
          printf("ERROR");
          return(-1);
        }
      read_folder(dir);
      closedir(dir);
    }

  8. #8
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    est ce que tu n a pas compris d->d_name , ou l interet de ce passage dans le code ?

Discussions similaires

  1. [Débutant] Opérateur New-besoin d'explication
    Par Hipokoo dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/05/2012, 17h37
  2. explication sur opérateur <<
    Par alfy dans le forum Débuter
    Réponses: 2
    Dernier message: 07/01/2012, 09h30
  3. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  4. Recherche code d'un fifo,ou explication
    Par don-diego dans le forum C
    Réponses: 8
    Dernier message: 25/07/2002, 10h26
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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