Le problème là c'est qu'il faut revoir les bases.
Pour commencer, strtol() demande qu'on lui passe en paramètre une chaîne de caractères C, c'est-à-dire une suite de caractères terminée par le caractère NUL, c'est-à-dire '\0' (ou en entier 0).
Là, si tu souhaites lire 8 bits par 8 bits, ton tableau sera trop petit,, parce qu'il faut les 8 caractères pour chaque bits, et un 9ème pour contenir le 0 de fin de chaîne. Lorsqu'on déclare un tableau, la valeur mise entre crochet c'est le nombre de cases que va contenir le tableau. À ne pas confondre avec l'indice de celles-ci :
char monTableau[N] = {0};
Ici pour ce tableau on aura N cases dont les indices iront de 0 à N-1.
Ensuite, la première chose qu'il faut définir dans une boucle c'est sa condition de sortie. Ici, tu définis une condition de sortie mais elle n'est jamais atteinte. Pourquoi ? Parce qu'elle dépend de i et que i ne change pas.
Donc ta boucle sera infinie, et chaque valeur lue par fgetc() écrasera celle précédemment lu.
Il te faut donc ajouter un i++ à la fin de ta boucle.
Mais il n'y a pas que ça comme problème dans ta boucle. La condition de sortie se base sur le nombre de bits à lire passé en paramètre...
Mais si le xbits est plus grand que le nombre de cases de ton tableau alors la boucle s'amusera au bout d'un moment à écrire au-delà de la mémoire qui lui est alloué, ce qui au bout d'un moment plantera le programme.
De plus, si tu dois lire plus de valeurs que le nombre de caractères disponible dans le fichier, là aussi ça posera problème, tu ne vérifies pas que tu as atteint la fin du fichier.
Il faut donc que tu revois ta fonction complètement.
PS : excuse-moi si j'ai semblé agressif.
Partager