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 :

Prendre en argument des pointeurs de fichiers


Sujet :

C

  1. #1
    Membre régulier Avatar de DJ Caësar 9114
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 134
    Points : 81
    Points
    81
    Par défaut Prendre en argument des pointeurs de fichiers
    Bonjour à tous,
    voilà mon problème: je voudrais dans une fonction main créer des fichiers, et les utiliser dans des fonctions annexes. voici mon code:

    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
    48
    49
    #include <stdio.h>
     
    typedef union
    {
      unsigned long long g;
      unsigned long p[2];
    }
    i64_u;
     
    long  taille(FILE* fd)
    {
       long size;
       fseek(fd, 0, SEEK_END);
       size = ftell(fd);
       return size;
    }
     
    void addition (FILE* a, FILE* b, FILE* c)
    {
    i64_u alpha,beta,temp;
    unsigned long aa,bb;
    unsigned long long cc;
    fread(&aa,1,sizeof(unsigned long),a);
    printf("\n>>>> %lu\n",aa);
    alpha.p[1]=aa;
    fread(&bb,1,sizeof(unsigned long),b);
    beta.p[1]=bb;
    temp.g=alpha.g+beta.g;
    cc=temp.g;
    printf("\n>> %llu %llu %llu %d",temp.g, alpha.g, beta.g,taille(a));
    fwrite(&cc,1,sizeof(unsigned long long),c);
    }
     
    int main() {
    unsigned long a=11111,b=2222;
    unsigned long long c;
    FILE *f1,*f2,*f3;
    f1=fopen("a","wb");
    f2=fopen("b","wb");
    f3=fopen("c","wb");
    fwrite(&a,1,sizeof(unsigned long),f1);
    fwrite(&b,1,sizeof(unsigned long),f2);
    printf("\n%d %d %d\n",taille(f1),taille(f2),taille(f3));
    addition(f1,f2,f3);
    printf("\n%d %d %d\n",taille(f1),taille(f2),taille(f3));
    fread(&c,1,sizeof(unsigned long long),f3);
    printf("\nc: %llu\n",c);
    return 0;
    }
    le problème c'est qu'apparemment, dès que je rentre dans la fonction "addition", il n'arrive pas à lire les fichiers. Voici ce que j'obtiens lors de l'exécution du programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    4 4 0
     
    >>>> 3086734528
     
    >> 8063742496497979380 13257423849193996288 13253062721013534708 4
    4 4 8
     
    c: 577731090883353656
    et ces chiffres changent à chaque exécution...

    est-ce une erreur de pointeur?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    tu ne reviens pas en début de fichier avant de lire c....

  3. #3
    Membre régulier Avatar de DJ Caësar 9114
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 134
    Points : 81
    Points
    81
    Par défaut
    j'y ai pensé mais même si je rajoute un "rewind" ca ne marche pas

  4. #4
    Membre régulier Avatar de DJ Caësar 9114
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 134
    Points : 81
    Points
    81
    Par défaut
    en réalité même ceci ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned long a=1,b=2222,yo;
    unsigned long long c;
    FILE *f1,*f2,*f3;
    f1=fopen("a","wb");
    f2=fopen("b","wb");
    f3=fopen("c","wb");
    fwrite(&a,1,sizeof(unsigned long),f1);
    rewind(f1);
    fread(&yo,1,sizeof(unsigned long),f1);
    printf("\n## %lu",yo);
    celà m'affiche:
    et encore le nombre change à chaque exécution!

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    et ton fichier n'est pas ouvert en lecture, mais en écriture...

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par souviron34
    et ton fichier n'est pas ouvert en lecture, mais en écriture...
    Au passage, s'il avait teste les codes retour des fonctions (fopen, fread et fwrite) il s'en serait apercu.

    Moralite de l'histoire: si les fonctions retournent un code d'erreur, c'st peut etre parce qu'il y a une bonne raison de le faire.

  7. #7
    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 Cesar9114
    en réalité même ceci ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned long a=1,b=2222,yo;
    unsigned long long c;
    FILE *f1,*f2,*f3;
    f1=fopen("a","wb");
    f2=fopen("b","wb");
    f3=fopen("c","wb");
    fwrite(&a,1,sizeof(unsigned long),f1);
    rewind(f1);
    fread(&yo,1,sizeof(unsigned long),f1);
    printf("\n## %lu",yo);
    celà m'affiche:
    et encore le nombre change à chaque exécution!
    Pour ouvrir un fichier en lecture et en écriture, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fic = fopen("nomFichier","w+");
    Evidemment, il ne faut pas oublier de tester le retour de la fonction fopen().

    Pour ce qui est de la fonction fread() et fwrite(), je pense que tu as inversé l'argument 2 et l'argument 3.


    .

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

Discussions similaires

  1. [XL-2010] Extraire des caractères à un nom de fichier et prendre en compte le nom de fichier
    Par Malcomiix dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/03/2013, 16h51
  2. Écriture dans un fichier via des pointeurs
    Par sep55 dans le forum Débuter
    Réponses: 4
    Dernier message: 23/03/2011, 22h08
  3. pointeurs sur les arguments des fonctions?
    Par brunoP dans le forum C
    Réponses: 3
    Dernier message: 14/05/2006, 18h11
  4. Réponses: 1
    Dernier message: 27/11/2005, 14h30
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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