Problema lettura da seriale in C

Vorrei leggere dei valori di temperatura in c su linux, utilizzo la libreria Dallas su arduino e il codice è:

dtostrf(sensors.getTempCByIndex(0),3,2,buffer); //converto il float in una stringa
Serial.print(buffer);
Serial.print('\n');
delay(1000);

su linux invece:

FILE* f = fopen("/dev/ttyACM0","r+");
while((c = fgetc(f)) != '\n')
  printf("%c",c);

questo codice mi fa generare una miriade di caratteri strani, alla fine però riesco a leggere la parte decimale...quindi mi esce tipo
**********************************************************.93 (se il valore inviato ad esempio è 24.93).
Sul monitor seriale di arduino invece tutto ok, ok anche se uso il c# come linguaggio sulla macchina e faccio una readline.

Ciao
il secondo parametro di dtostrf mi sembra che sia la lunghezza totale della stringa, punto e segno compresi ed il terzo la precisione, cioe' i caratteri dopo il punto; non so che valore ti aspetti ma forse 3 come secondo parametro e' poco;metti 5 o 6
Altra cosa, penso che buffer vada terminato ('\0') e che sia sufficentemente ampio da ospitare la stringa.
prova cosi':

char buffer[10];
dtostrf(sensors.getTempCByIndex(0),6,2,buffer);
buffer[10]='\0';

Ciao