Per leggere una riga di lunghezza "arbitraria" da uno stream si può fare una cosa molto "pulita" di questo tipo:
codice:#include <stdio.h> #include <string.h> #include <stdlib.h> char *read_line (FILE *f) { int block = 256; int capacity = 0, len = 0; char *buf = NULL, *p; do { capacity += block; p = (char*) realloc (buf, capacity); if (p == NULL) { free (buf); return NULL; } buf = p; fgets (&buf[len], capacity-len, f); if ((p = strchr (&buf[len], '\n')) != NULL) *p = '\0'; len += (int) strlen (&buf[len]); } while (p == NULL); p = (char*) realloc (buf, len+1); if (p != NULL) buf = p; return buf; }

Rispondi quotando