Salve ragazzi. Vorrei sapere se è corretto scrive cosi questa funzione:
struttura di riferimento:codice:void insrec(char* fname1, char* fname2, Record rec) { FILE* f1 = fopen(fname1, "rb"); FILE* f2 = fopen(fname2, "wb"); if(f1 == NULL || f2 == NULL) { printf("Errore nell'apertura di uno dei due files\n"); return 0; } Record* ptrRec; while(!feof(f1)) { ptrRec = malloc(sizeof(Record)); fread(ptrRec, sizeof(Record), 1, f1); <--MIO DUBBIO, GIUSTO? if(ptrRec->value >= rec.value) { fwrite(&rec, sizeof(Record), 1, f2); <--MIO DUBBIO, GIUSTO? fwrite(ptrRec, sizeof(Record), 1, f2); <--MIO DUBBIO, GIUSTO? free(ptrRec); } else { fwrite(ptrRec, sizeof(Record), 1, f2); <--MIO DUBBIO, GIUSTO? free(ptrRec); } } fclose(f1); fclose(f2); }
Testo esercizio:codice:typedef struct { long value; char descr[30]; } Record;
Scrivere una funzione void insrec(char *fname1, char *fname2, Record rec) che presi in input i nomi di due file binari (nelle stringhe fname1 e fname2), tali che il primo file contiene una sequenza di record di tipo Record ordinata in senso crescente rispetto al campo value, scrive nel secondo file i record del primo file aggiungendovi il record rec inserito in modo da rispettare l'ordinamento. Ad esempio, se il primo file contiene
{3, "vite"} {5, "dado"} {5, "dado2"} {8, "punta"}
e se rec = {2, "martello"} allora la funzione scrive nel secondo file
{2, "martello"} {3, "vite"} {5, "dado"} {5, "dado2"} {8, "punta"}
se invece rec = {6, "martello"}, la funzione scrive nel secondo file
{3, "vite"} {5, "dado"} {5, "dado2"} {6, "martello"} {8, "punta"}