ciao a tutti,
premetto che ho fatto un programma in C che con linux funziona bene. In pratica legge un file e lo interpreta.
Compilando questo programma con linux, lui gestisce perfettamente i differenti ritorni a capo in base al sistema (\n, \r oppure \n\r).

La cosa non accade usando mingw dato in dotazione con devcpp 4.9.9.2.
Il programma da problemi quando salvo un file con il formato DOS \n\r.
Facendo il debug e leggendo il file di input in questione in formato DOS, ottengo questo risultato:
0x3e25c8 "x -y\ny -x\n-x -z\nz -y\nð_ºî"

Invece, aprendo il file di input e lo codifico per UNIX e MAC, ottengo rispettivamente
0x3e25c8 "x -y\ny -x\n-x -z\nz -y\n"
0x3e25c8 "x -y\ry -x\r-x -z\rz -y\r"

che è il risultato desiderato e il programma funziona bene in entrambi i casi

Il problema sta quindi quando salvo il file di input in dos con \n\r. Ripeto che su linux questo non accade e il file viene letto con successo.

La funzione che si occupa di leggere il file in questione è la seguente:
codice:
char * leggiInputFile(FILE* h)
{
	char *contenuto;
	int size;
	//leggo la dimensione del file
	//spostando il puntatore alla fine e leggendo il numero di byte
	fseek(h,0,SEEK_END);
	size = ftell(h);
	rewind(h);
	
	contenuto = (char*)malloc(size+1);
	
	if (contenuto==NULL)
	{
		printf("Cannot read input file: insufficient memory\n");
	}
	
	fread(contenuto,1,size,h);
	contenuto[size]='\0';
	
	return contenuto;
}
cosa ha di sbagliato su windows questo codice? C'è per caso una diversa implementazione della funzione fread che toglie \n\r e li fa diventare \n? Se è così, allora cos'è quella schifezza che trovo alla fine?