Bonjour,
Mon prof a donné une correction à un exercice.
La donnée est la suivante : Ecrire un programme C permettant d’afficher à l’écran l’intégralité d’un fichier texte donné, sans jamais utiliser de boucle
Sa correction est simple, il lit la taille du fichier, alloue un buffer de la taille du fichier, et lis avec fread le nombre d’octet. Jusqu’à la pas de surprise. Là où je suis choqué c’est qu’il fait un printf("%s",buffer)
alors que son buffer n’est pas null terminated.
Voici un code minimal (sans les checks pour démontrer la chose.)
int main() {
FILE* file = fopen("../test.txt","r");
if(file == NULL){
perror("Youston, we have a problem");
}
fseek(file,0,SEEK_END);
size_t size = (size_t) ftell(file);
rewind(file);
char * data = calloc(size,1);
fread(data,1,size,file);
printf("%s\n\n",data);
free(data);
fclose(file);
}
J’ai fais quelques testes et en mémoire, mes données sont TOUJOURS suivie d’un octet à 0 qui agit comme \0 pour printf.
Ma question est donc d’où provient ce \0 ?
fread n’en met pas
les 0 de calloc sont entièrements réécrit puisque on alloue size octets et qu’on écrit size octets
Merci d’avance