
Envoyé par
Sve@r
Bonjour
Dit autrement, dans ton second cas tu écris "maxToSave" fois une zone "worker" d'une taille de "t" octets, Alors que dans ton premier cas tu tentes d'écrire une fois une zone "worker" sensée être d'une taille "t * maxToSave" octets.
Si "worker" est la même dans les deux cas, alors le premier ne peut pas fonctionner...
Voici comment tu aurais pu faire pour le premier cas
1 2 3 4 5 6 7 8 9
| typedef struct {
...
...
...
} t_worker;
t_worker Worker[10];
... (remplissage Worker[0], Worker[1] ... Worker[9])...
fwrite(Worker, sizeof(t_worker), 10, fichier) |
Cv merci donc si je comprend bien les 2 méthodes sont
1re méthode
1 2 3 4 5
| for(cpt = 0; cpt < MaxToSave; cpt++){
strcpy(Worker[cpt].NumRegistre, "-1");
strcpy(Worker[cpt].nom, "-1");
}
fwrite(&Worker, sizeof(Worker), MaxToSave, fichier); |
2e méthode
1 2 3 4
| strcpy(Worker.NumRegistre, "-1");
strcpy(Worker.nom, "-1");
for(cpt = 0; cpt < MaxToSave; cpt++){
fwrite(&Worker, sizeof(Worker), 1, fichier); |
est-ce bien ça?

Envoyé par
Matt_Houston
fwrite (clic !) attend en premier paramètre l'adresse d'une zone mémoire d'une taille au moins égale à
size * count. Si ce n'est pas le cas, le déréférencement du contenu du buffer au-delà de ses limites va produire un
comportement indéterminé.
Nous ne savons pas comment est déclarée ta variable
Worker, mais son adresse doit donc correspondre au début d'une zone d'au moins
sizeof(Worker) * MaxToSave octets.
Matt_Houston je ne suis pas sur d'avoir compris ce que tu disais 
Mais J'avais utilisé ce site
qui me retournais ceci pour la fonction
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
j'avais du coup compris
fwrite(le pointeur de l'élément à copier, la taille de l'élément, le nombre de fois que l'on veut recopier cet élément, le pointeur du fichier)
mais visiblement c'est
fwrite(pElem, TailleElem, pElem + TailleElem * nbr de fois à répéter le déplacement ds la mémoire, le pointeur du fichier)
Merci à vous deux pour l'aide
Partager