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