S
sw33tlull4by
Guest
Hallo!
Ich habe hier eine Funktion welche mich schon seit ein paar Tagen verzweifeln laesst.
Das markierte calloc() produziert Fehler, und ich weiss absolut nicht wiso.
An die Funktion wird ein Poitnerarray/Array von Strings uebergeben, und ein Zeiger auf eine auszulesende Datei.
Zurrueckgegeben wird ein Pointer auf einen Speicherblockin welchem die Resultate stehn.
Die Datei wird Zeile fuer Zeile durchsucht.
Ich komm wie gesagt einfach nicht dahinter wiso das calloc Fehler schmeisst.
Danke im vorraus.
sw33t
//edit: Programmiersprache ist C und es soll Plattformunabhaengig bleiben.
Ich habe hier eine Funktion welche mich schon seit ein paar Tagen verzweifeln laesst.
Das markierte calloc() produziert Fehler, und ich weiss absolut nicht wiso.
An die Funktion wird ein Poitnerarray/Array von Strings uebergeben, und ein Zeiger auf eine auszulesende Datei.
Zurrueckgegeben wird ein Pointer auf einen Speicherblockin welchem die Resultate stehn.
Die Datei wird Zeile fuer Zeile durchsucht.
Ich komm wie gesagt einfach nicht dahinter wiso das calloc Fehler schmeisst.
Danke im vorraus.
sw33t
//edit: Programmiersprache ist C und es soll Plattformunabhaengig bleiben.
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* filter(FILE *datei,char** suchkriterien)
{
int size = 10;
char character= ' ';
char* working = (char*) calloc(size,sizeof(char));
char*backup,*tmp;
char *backup2,*result;
char** suchkriterienbackup = suchkriterien;
int counter = 0;
backup2 = result = (char*) calloc(size,sizeof(char));
tmp = backup = working;
do
{
do
{
character = fgetc(datei);
if(counter == size -2)
{
tmp = calloc(size*2,sizeof(char));
tmp = memcpy((void*)tmp,(const char*) backup,counter);
free(backup);
backup = working = tmp;
working +=size-2;
size *=2;
}
counter++;
if(!feof(datei))
*working++ = character;
else
*working++ = '\n';
}while(character != '\n'&&!feof(datei));
*working = '\0';
while(*(suchkriterien) != NULL)
{
if(NULL!= strstr(backup,*(suchkriterien)++))
{
backup2 = (char*) calloc(strlen(backup)+strlen(backup2),sizeof(char));
backup2 = memcpy((void*)backup2,(const char*)result,strlen(result));
result = backup2;
//strncat(result,backup,strlen(backup));
break;
}
}
if(backup==NULL);
else
free(backup);
suchkriterien = suchkriterienbackup;
size = 10;
counter = 0;
tmp =(char*) calloc(size,sizeof(char));
backup = working = tmp;
if(feof(datei))
break;
}while(1);
free(backup);
return backup2;
}