char* fgetline(FILE* fp) { size_t size = 0; char* line = malloc(size); char buf = ' '; char* tmp; while (((buf = fgetc(fp)) != '\n') && buf != EOF) { size++; tmp = realloc(line, size + 1); if (tmp == NULL) { tmp = malloc(size + 1); strcpy(tmp, line); } line = tmp; line[size - 2] = buf; } if (size >= 1) { line[size - 1] = '\0'; } return line; }