The_Invisible
2008-09-08, 21:43:29
hallo,
hätte eine frage an die profis hier. und zwar habe ich eine funktion geschrieben die eine datei zeilenweise in eine stringtabelle einliest, beispiel:
char **read2chararr()
{
FILE *fp;
char buf[1024], **con = NULL;
int i = 1;
fp = fopen("C:\\Windows\\System32\\drivers\\etc\\services", "r");
while(fgets(buf, 1024, fp) != NULL)
{
//printf("%i", i);
if(con == NULL)
{
con = (char **) malloc(sizeof(char *));
con[0] = (char *) malloc(sizeof(char) * (strlen(buf)+1));
strcpy(con[0], buf);
}
else
{
//printf("%i = %s\n", strlen(buf), buf);
con = (char **) realloc(con, sizeof(char *) * i);
con[i-1] = (char *) malloc(sizeof(char) * (strlen(buf)+1));
strcpy(con[i-1], buf);
}
i++;
}
con = (char **) realloc(con, sizeof(char *) * i);
con[i-1] = NULL;
fclose(fp);
return con;
}
funktioniert auch alles wunderbar und ohne probleme. mir stellt sich aber die frage ob die malloc() und realloc() funktionen nicht zu viel kosten da sie quasi für jede zeile aufgerufen werden und ob man das vielleicht besser machen könnte. irgendwelche tipps oder tricks in dieser art?
aja, und die funktion ist noch stark prototyp bevor sich einige beschweren kommen. ;)
mfg
hätte eine frage an die profis hier. und zwar habe ich eine funktion geschrieben die eine datei zeilenweise in eine stringtabelle einliest, beispiel:
char **read2chararr()
{
FILE *fp;
char buf[1024], **con = NULL;
int i = 1;
fp = fopen("C:\\Windows\\System32\\drivers\\etc\\services", "r");
while(fgets(buf, 1024, fp) != NULL)
{
//printf("%i", i);
if(con == NULL)
{
con = (char **) malloc(sizeof(char *));
con[0] = (char *) malloc(sizeof(char) * (strlen(buf)+1));
strcpy(con[0], buf);
}
else
{
//printf("%i = %s\n", strlen(buf), buf);
con = (char **) realloc(con, sizeof(char *) * i);
con[i-1] = (char *) malloc(sizeof(char) * (strlen(buf)+1));
strcpy(con[i-1], buf);
}
i++;
}
con = (char **) realloc(con, sizeof(char *) * i);
con[i-1] = NULL;
fclose(fp);
return con;
}
funktioniert auch alles wunderbar und ohne probleme. mir stellt sich aber die frage ob die malloc() und realloc() funktionen nicht zu viel kosten da sie quasi für jede zeile aufgerufen werden und ob man das vielleicht besser machen könnte. irgendwelche tipps oder tricks in dieser art?
aja, und die funktion ist noch stark prototyp bevor sich einige beschweren kommen. ;)
mfg