La manière la plus simple est de lire un caractère et de l'imprimer juste après la lecture :
int c;
FILE *file;
file = fopen("test.txt", "r");
if (file) {
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
}
c
est int
ci-dessus, puisque EOF
est un nombre négatif, et un simple char
peut être unsigned
.
Si vous voulez lire le fichier par morceaux, mais sans allocation dynamique de mémoire, vous pouvez faire :
#define CHUNK 1024 /* lire 1024 octets à la fois */
char buf[CHUNK];
FILE *file;
size_t nread;
file = fopen("test.txt", "r");
if (file) {
while ((nread = fread(buf, 1, sizeof buf, file)) > 0)
fwrite(buf, 1, nread, stdout);
if (ferror(file)) {
/* traiter l'erreur */
}
fclose(file);
}
La deuxième méthode ci-dessus est essentiellement comment vous lirez un fichier avec un tableau alloué dynamiquement :
char *buf = malloc(chunk);
if (buf == NULL) {
/* traiter l'échec de malloc() */
}
/* sinon faites ceci. Notez 'chunk' au lieu de 'sizeof buf' */
while ((nread = fread(buf, 1, chunk, file)) > 0) {
/* comme ci-dessus */
}
Votre méthode de fscanf()
avec %s
comme format perd des informations sur les espaces blancs dans le fichier, donc ce n'est pas exactement copier un fichier vers stdout
.