Witam,
Używam funkcji getline z stdio.h (libc).
http://www.freebsd.org/cgi/man.cgi?query=getline&apropos=0&sektion=0&manpath=FreeBSD+8.2-RELEASE&format=html
Jest prosta w użyciu, ale mam wątpliwości odnośnie sprzątania. Funkcja dokonuje dynamicznej alokacji pamięci poprzez realloc (przynajmniej według man). Wydaje mi się, że niezbędne w tej sytuacji jest korzystanie z free. Na przykład:
#define _WITH_GETLINE
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
bool test(char* line) {
return true;
}
int main(void)
{
int t;
scanf("%d", &t);
getchar(); // fix getline
char* line = NULL;
size_t linecap;
for(int i = 0; i < t; i++) {
getline(&line, &linecap, stdin);
test(line);
}
free(line);
return 0;
}
Wydaje mi się, że free powinno zostać wykonane zawsze, gdy
char* line
nie będzie już więcej reallocowane, a na przykład inna część programu będzie dalej działać.
Ponieważ nie jestem pewien pytam, by się upewnić, w końcu wycieki pamięci to poważna sprawa. W manie nie napisali nic o sprzątaniu, ale chyba nie ma tak że w języku C coś się samo posprząta.
Pozdrawiam,