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

Bibliothèque standard C Discussion :

fread ne peut pas lire un float


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 35
    Par défaut fread ne peut pas lire un float
    Bonjour,

    Ma question est toute simple mais je ne vois pas ou est le probleme. La commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = fread (buffer, 4, 1, pFile)
    ;

    ne me retourne toujours qu'un seul byte lu (au lieu de 4). De meme pour la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = fread (buffer, sizeof(float), 1, pFile)
    ;

    Quelqu'un aurait une idee?

    Au cas ou voici le code entier:

    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
    	FILE * pFile;
    	long lSize;
     
    	int verticesCount = g_groundMesh->getMeshDecl().numVertices;
    	int strideSize = g_groundMesh->getMeshDecl().stride;
    	int normalOffset = g_groundMesh->getMeshDecl().normal;
     
    	float *buffer, *positions, *normals;
    	size_t result;
     
    	pFile = fopen ( path , "rb" );
     
    	// obtain file size:
    	fseek (pFile , 0 , SEEK_END);
    	lSize = ftell (pFile);
    	rewind (pFile);
     
    	// allocate memory for smaller chunks of data
    	buffer = (float*) malloc (verticesCount * strideSize);
     
    	positions = (float*) malloc (sizeof(float) * verticesCount * 3);
    	normals = (float*) malloc (sizeof(float) * verticesCount * 3);
     
    	// just a test
    	result = fread (buffer, sizeof(float), 1, pFile);
    Merci

  2. #2
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 35
    Par défaut
    Toutes mes escuses j'avais mal lu la doc

    Return Value
    The total number of elements successfully read is returned as a size_t object, which is an integral data type.
    If this number differs from the count parameter, either an error occured or the End Of File was reached.
    You can use either ferror or feof to check whether an error happened or the End-of-File was reached.


    La fonction retourne en fait le nombre d'elements lus correctement. et non pas le nombre de bytes lus

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par gooze Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = fread (buffer, 4, 1, pFile)
    ;

    ne me retourne toujours qu'un seul byte lu (au lieu de 4). De meme pour la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = fread (buffer, sizeof(float), 1, pFile)
    ;

    Quelqu'un aurait une idee?
    La norme est clair à ce sujet:

    7.19.8.1 The fread function
    Synopsis
    1 #include <stdio.h>
    size_t fread(void * restrict ptr,
    size_t size, size_t nmemb,
    FILE * restrict stream);
    Description
    2 The fread function reads, into the array pointed to by ptr,upto nmemb elements
    whose size is specified by size,from the stream pointed to by stream.For each
    object, size calls are made to the fgetc function and the results stored, in the order
    read, in an array of unsigned char exactly overlaying the object. The file position
    indicator for the stream (if defined) is advanced by the number of characters successfully
    read. If an error occurs, the resulting value of the file position indicator for the stream is
    indeterminate. If apartial element is read, its value is indeterminate.
    Returns
    3 The fread function returns the number of elements successfully read, which may be
    less than nmemb if a read error or end-of-file is encountered. If size or nmemb is zero,
    fread returns zero and the contents of the array and the state of the stream remain
    unchanged.
    EDIT:grillé

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/08/2012, 10h36
  2. CGI ne peut pas lire ni écrire dans un fichier
    Par leprofessionnel dans le forum Administration système
    Réponses: 2
    Dernier message: 23/02/2011, 14h19
  3. Le fichier bin ne peut pas lire le fichier *.xrc
    Par mess-mate dans le forum wxWidgets
    Réponses: 2
    Dernier message: 13/10/2008, 14h53
  4. mon lecteur DVD ne peut pas lire le CD
    Par anfakhaled dans le forum Composants
    Réponses: 7
    Dernier message: 31/08/2007, 17h57
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

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