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 :

question sur structure stat


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut question sur structure stat
    Bonjour

    J ai une petite question, par rapport a ma fonction, je l est ecrite de 2 facon différente et elle marche bien dans les deux cas mais laquelle est la mieux ? et quel est la réel différence ? voila la premiere variante :

    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
    struct stat *stat_fichier(char *nomFichier)
    {	
    	struct stat *fichier;
     
    	fichier = malloc(sizeof(struct stat));
     
    	if(!fichier)
    	{
    		fprintf(stderr,"Allocation impossible\n");
    		exit(EXIT_FAILURE);
    	}
     
    	if(stat(nomFichier, fichier) != 0)
            {
                   perror("fstat ");
                   exit(EXIT_FAILURE);
            }
     
        return fichier;
    }
    et voila la deuxieme :

    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
    struct stat *stat_fichier(char *nomFichier)
    {	
    	void *fichier = NULL;
     
    	fichier = (struct stat*)malloc(sizeof(struct stat));
     
    	if(!fichier)
    	{
    		fprintf(stderr,"Allocation impossible\n");
    		exit(EXIT_FAILURE);
    	}
     
    	if(stat(nomFichier, fichier) != 0)
        {
            perror("fstat ");
            exit(EXIT_FAILURE);
        }
     
        return fichier;
    }

    et dans la main je l apel comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    info = stat_fichier("info.txt");
     
    printf("taille du fichier : %lu \n", info->st_size);
    info est alloué au debut donc tous marche dans les deux cas, mais quelle difference il y a?

    et une autre question a cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = (struct stat*)malloc(sizeof(struct stat));
    ca marche tres bien sans le cast comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = malloc(sizeof(struct stat));
    J ai lus des documents ou il est dit que c est obligatoire , et dans d autre que c' est un manque de lisibilité pour le code et que ca sert a rien ? qu est ce qu il en est vraiment ?

    Merci a vous.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par julio.t Voir le message
    J ai lus des documents ou il est dit que c est obligatoire , et dans d autre que c' est un manque de lisibilité pour le code et que ca sert a rien ? qu est ce qu il en est vraiment ?
    http://emmanuel-delahaye.developpez....tes.htm#malloc

    Tu oublies de libérer ce qui a été alloué...

    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
     
    int main (void)
    {
       struct stat *p_stat = stat_fichier ("main.c");
     
       if (p_stat != NULL)
       {
     
          printf ("taille du fichier : %lu \n", p_stat->st_size);
     
          free (p_stat), p_stat = NULL;
       }
     
       return 0;
    }
    Mais c'est bien trop compliqué...
    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
     
    #include<stdio.h>
    #include <stdlib.h>
     
    #include <sys/stat.h>
     
    void stat_fichier (struct stat *p_info, char const *nomFichier)
    {
       if (p_info != NULL)
       {
          if (stat (nomFichier, p_info) != 0)
          {
             perror ("fstat ");
             exit (EXIT_FAILURE);
          }
       }
    }
     
    int main (void)
    {
       struct stat info;
     
       stat_fichier (&info, "main.c");
     
       printf ("taille du fichier : %lu \n", info.st_size);
     
       return 0;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Oui vue cette angle c est sur que je me suis compliqué la vie la ... j' adopte, bon je vais voir ta page pour ce cast.

    Merci bien.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Il est cependant des cas rares où le cast est indispensable.

    * Le compilateur n'est pas conforme à ISO C-90 ou ISO C-99
    * Le compilateur n'est pas C mais par exemple pré-C++98
    j ai gcc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ gcc -v
    Utilisation des specs internes.
    Cible : i486-linux-gnu
    Configuré avec: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
    Modèle de thread: posix
    version gcc 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
    je suis conforme alors ?

    Mais il vaut mieux le mettre au cas ou celui qui compilera le programme en a pas un a la norme non ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par julio.t Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ gcc -v
     
    version gcc 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
    je suis conforme alors ?
    Oui.
    Mais il vaut mieux le mettre au cas ou celui qui compilera le programme en a pas un a la norme non ?
    Bof... C'est peu probable de nos jours...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Ok merci beaucoup .

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

Discussions similaires

  1. Questions sur Structure fichier Midi.
    Par ZouBi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 19/01/2011, 13h53
  2. Débutant: Question sur l'utilisation des structures
    Par pdgnr dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/10/2006, 13h03
  3. Petite question sur les structures
    Par progfou dans le forum C
    Réponses: 5
    Dernier message: 21/06/2006, 15h49
  4. Question sur les statics et les structures
    Par Steph12 dans le forum C
    Réponses: 3
    Dernier message: 24/03/2005, 13h20

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