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 :

Initialisation d'un pointeur de type 'FILE *'


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut Initialisation d'un pointeur de type 'FILE *'
    Bonjour,
    Je ne comprend pas pourquoi mais à force de diagnostique et de rechcerches depuis plus d'une heure je viens de m'apercevoir qu'un pointeur de type 'FILE *' (peut-être n'est-ce pas le seul type) est initialisé à 0 ('NULL') en présence de déclaration de tableaux de pointeurs (même si cette déclaration est faite quelques lignes en dessous) et initialisé à une valeur (aléatoire à première vue) lorsque qu'aucun tableau de pointeur n'est défini.

    Je ne comprends plus rien d'autant plus que quand je défini ce pointeur grâce à fopen il n'est toujours pas initialisé si des tableaux de pointeurs ont été définis...

    Est-ce que quelqu'un a une explication (simple de préféence, je débute :p) à mon problème?

    Merci!

    EDIT : à titre d'exemple, après avoir basardé tout mon pour trouver le problème voici le bout de code qui m'a permit de faire mon diagnostique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(void)
    {
        FILE * rien;
        if(rien == NULL) printf("Problème\n");
     
        char *pers[6] = {"je", "tu", "il", "nous", "vous", "ils"};
        char *term[6] = {"e", "es", "e", "ons", "ez", "ent"};
     
        return 0;
    }

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Est-ce que tu as un exemple de code a proposer pour exposer ton incompréhension.

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par sdumasp 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
    #include <stdio.h>
     
    int main(void)
    {
        FILE * rien;
        if(rien == NULL) printf("Problème\n");
     
        char *pers[6] = {"je", "tu", "il", "nous", "vous", "ils"};
        char *term[6] = {"e", "es", "e", "ons", "ez", "ent"};
     
        return 0;
    }
    Qu'est-ce que tu constates au juste ? rien est une variable locale automatique qui va être empilé sur la pile donc dedans tu peux avoir tout et n'importe quoi si tu ne l'initialises pas. Cela peut être null comme autre chose il n'y a, désolé, a priori aucun mystére.

  4. #4
    Membre averti
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    sisi tant qu'au moins un des deux tableaux de pointeurs est toujours déclaré, 'FILE * rien' est initialisé à 'NULL'

    Essaie ensuite en commentant les deux déclarations de tableaux et 'FILE * rien' sera initialisé avec une valeur variable. (en tout cas sous Code::Blocks)

  5. #5
    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
    Lorsqu'on initialise un tableau ou une structure tous les éléments restants non initialisés sont remplis par des 0. Par exemple si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int t[10] = {0, 10, 20, 30, 40};
    t[5], t[6], t[7], t[8] et t[9] seront initialisés à 0.

    Sur x86 les variables locales sont placées sur la pile (donc dernier arrivé, premier sorti). Par exemple si on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int a, b, c, d, e, * p = &e;
    Alors :
    p[0] = e
    p[1] = d
    p[2] = c
    p[3] = b
    p[4] = a

    Et comme dit plus haut, si tu initialises un tableau, tous les éléments restants non initialisés seront initialisés à 0 ... Tout peut arriver (selon le compilateur, le système, etc.). Moi en tout cas (Code::Blocks, Windows XP) j'ai pas ce "phénomène".

  6. #6
    Membre averti
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    mais je ne comprend pas bien le rapport entre mes tableaux de pointeur et mon 'FILE * rien'...
    quand j'ai mes tableaux, 'FILE * rien' est TOUJOURS initialisé à 'NULL' tandis que sans les tableaux, il est TOUJOURS initialisé aléatoirement mais jamais 'NULL'...

    en plus quand j'ai mes tableaux, même si je déclare 'FILE * rien' et que je l'initialise après 'rien = fopen(nomfichier, "w")' par exemple, il est dans tous les cas nul...

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tes tableaux et ton FILE* sont sur la pile ! Par définition une variable locale automatique non initialisée a comme valeur n'importe quoi car on ne peut faire savoir ce qu'il y avait sur la pile avant. Il n'y a pas un petit bonhomme vert caché dans ton micro qui te fait une blague foireuse pour te faire péter les plombs.

    Pour le fopen qui te renvoi NULL c'est que le fichier n'existe pas ou qu'il est impossible de l'ouvrir.

Discussions similaires

  1. [JSP]<input type="file">
    Par phoebe dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 16/07/2012, 19h50
  2. Réponses: 24
    Dernier message: 23/02/2006, 11h04
  3. [<input type="file"/>]
    Par NikoBe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/04/2005, 09h17
  4. [HTML]Utilisation du type file
    Par Kuroro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 23/12/2004, 16h12
  5. chemin d'un input de type file
    Par sbbn1 dans le forum ASP
    Réponses: 2
    Dernier message: 05/04/2004, 20h19

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