Moin
Aktuell bin ich daran ein Programm zu schreiben, um Zeilenduplikate in einer Textdatei zu finden, und zu eliminieren.
Dabei erstelle ich ein Array mit [lines] Anzahl der Lines .
Dann werden aus der Textdatei die Zeilen als String in das Array gesteckt.
Das Array wird dann sortiert, und dann soll das Array durchgegangen werden, ob das k-te Element und das k+1-te Element unterschiedlich sind, und dann wird in eine Datei geprintet.
Irgendwie verstehe ich aber die Probleme die der Compiler macht nicht, da ich ja letztendlich im Array Daten vom Typ char habe, aber laut Compiler diese scheinbar ints sind.
Weiterhin bekomme ich immer die aussagekraeftige Meldung "Speicherzugriffsfehler"
Hier mal mein Code, vielleicht weiss jemand ja weiter.
else
{
FILE *fIn = fopen(argv[1], "r");
if ( fIn == 0 )
{
printf( "Could not open file\n" );
}
else
{
int ch,lines;
while(!feof(fIn))
{
ch = fgetc(fIn);
if(ch == '\n')
{
lines++;
}
}
int *ptr = malloc(sizeof(int)*lines*4);
char fileArray[lines];
FILE *fOut = fopen("output.txt", "wb");
if (ptr == NULL)
{
printf(" Out of memory!\n");
exit(1);
}
clock_t t;
t = clock();
char buf[512];
int counter=0;
while ((fgets(buf, sizeof(buf), fIn) != NULL))
{
strcpy(fileArray[counter],buf);
counter++;
}
qsort(fileArray,3,sizeof(*fileArray),(int(*)(const void*,const void*))strcmp);
int k;
while(k < sizeof(fileArray))
{
if(fileArray[k] != fileArray[k+1])
{
strcpy(fileArray[k],buf);
fprintf(fOut,"%s",buf);
}
k++;
}
free(ptr);
t = clock() - t;
double time_taken = ((double)t)/CLOCKS_PER_SEC; // in seconds
printf("\nThe removal took %.4f seconds to finish \n", time_taken);
fclose(fOut);
fclose(fIn);
return 0;
}
Alles anzeigen
Die Fehler
duplicatefinder.c: In function ‘main’:
duplicatefinder.c:62:12: warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]
strcpy(fileArray[counter],buf);
^~~~~~~~~
In file included from duplicatefinder.c:2:0:
/usr/include/string.h:125:14: note: expected ‘char * restrict’ but argument is of type ‘char’
extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
^~~~~~
duplicatefinder.c:72:12: warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]
strcpy(fileArray[k],buf);
^~~~~~~~~
In file included from duplicatefinder.c:2:0:
/usr/include/string.h:125:14: note: expected ‘char * restrict’ but argument is of type ‘char’
extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
^~~~~~
Alles anzeigen