
Envoyé par
boubz013
Bonjour Obsidian,
J'ai etudié le code , je le trouve assez complexe pour moi

mais j'ai essayé de le récrire tel que tu me la expliqué plus haut, c'est un peu du n'importe quoi mais je veux comprendre pourquoi je fais n'importe quoi alors j'ai commenter chacune de mes lignes et si ça ne te derange pas de me corriger ça serait super

!!
Alors, à première vue :
j=sizeof(char); // On stoke dans j la taille de char (je ne comprends pas trop parcontre)
Non. Ce que je t'ai dit de faire, c'est de mettre dans « j » la valeur renvoyée par fread(), car celle-ci te donne le nombre de caractères qu'elle a réussi à lire. C'est la valeur que tu as mise dans « lecture » à la place.
D'ailleurs, à ce sujet :
if (lecture != NULL) // On verifie si la lecture a reussie
Ça, c'est faux également, pour les mêmes raisons qu'au dessus : fread() ne renverra jamais « NULL ». Elle pourra éventuellement renvoyer zéro, ce qui se confondra avec la valeur de NULL, mais ce sont des termes qui désignent deux choses différentes.
if (buffer[i]) // On verifie que notre buffer existe si oui
Non plus. Quand tu fais cela, tu lis le contenu du caractère se trouvant à la position « i » de buffer (que ce buffer existe ou non, d'ailleurs) et tu l'évalues. Si ce caractère est non-nul, la condition est évaluée comme vraie.
if (buffer[i]>j) // On verifie que la chaine du buffer ne soit pas plus grande que j
Toujours pas (désolé). Quand tu fais cela, tu compares la valeur d'un caractère (à la position i) à celle de j. Ce qui ne signifie rien en l'occurence.
tab=malloc(taille*j); // allocation de memoire , multiplie la variable taille incrmenté
Ici, il y avait de l'idée. Sauf que j n'est pas censée contenir la taille d'un caractère.
tab=buffer; // On remplie notre chaine buffer dans notre tableau
Non ! Quand tu fais ça, tu copies les pointeurs ! L'adresse de buffer est copiée dans tab qui, alors, pointe le même tampon. Et donc, au passage, tu as perdu l'adresse de la zone mémoire allouée par malloc(), qui ne pourra plus être libérée.
- Pour copier un tampon dans un autre, utilises strcpy() ou memcpy() ;
- Si tu alloues de la mémoire avec malloc(), il faut penser à la libérer avec free(). Le programme ne le fera pas pour toi. Je ne vois pas cet appel dans ton programme.
Courage.
Partager