Re: c read

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: Liste Guilde
Subject: Re: c read
Le lundi 31 janvier, Patrick Dupre a écrit :
> J'ai un fichier binaire contenant des nul (provenant d'un application DOS).
> Je peux le lire (par example avec sscanf), mais chaque fois que je vuex
> lire avec un fread, la lecture s'arrete au premier nul, et je ne parviens
> pas a lire les autres caracteres.


Tu ne voudrais pas dire plutôt le contraire ? sscanf() est fait pour
scanner des chaînes de caractères, il ne doit pas aimer les nul en
entrée. Par contre fread() est tout à fait adapté pour lire des données
binaires :

    $ cat copy.c
    #include <stdio.h>
    #include <stdlib.h>


    int main(int argc, char *argv[])
    {
        FILE *f;
        char buffer[1024];
        int n;


        if (argc != 2) {
            fprintf(stderr, "Usage: %s file\n", argv[0]);
            return EXIT_FAILURE;
        }


        f = fopen(argv[1], "r");
        if (!f) {
            perror(argv[1]);
            return EXIT_FAILURE;
        }


        while ((n = fread(buffer, 1, sizeof buffer, f)) != 0) {
            fwrite(buffer, 1, n, stdout);
        }


        return EXIT_SUCCESS;
    }
    $ gcc -W -Wall copy.c -o copy
    $ od -a dummy.txt 
    0000000   t   e   s   t nul   t   e   s   t  nl
    0000012
    $ ./copy dummy.txt | od -a
    0000000   t   e   s   t nul   t   e   s   t  nl
    0000012


-- 
Edgar Bonet           Maison : 04 76 21 29 16    Bureau : 04 76 88 10 96
3 rue Jean Prévost    Mobile : 06 77 19 79 39    Fax    : 04 76 88 11 91
38000 Grenoble        guilde@???     www.edgar-bonet.org