Ho provato anche mettendo la fclose e la free fuori dal ciclo for (la free libera il buffer, deve stare dentro per funzionare, credo).

Il codice io lo tengo indentato, ma copiandolo qui non si è portato dietro l'indentazione e l'ho dovuto rifare a meno...

Comunque, possibili soluzioni?

Se può servire a capire il problema, la funzione WriteOnFile è questa

codice:
void writeOnFile(string buffer, string fine, FILE *listaarticoli) {
    size_t len = 0;
    strcat(buffer, fine);
    len = strlen(buffer);
    if (len < 200)
        fwrite(buffer, len, 1, listaarticoli);
    else
        printf("Stringa da scrivere troppo lunga");
}