Hashes nimmt man, wenn es auf die letzte Millisekunden und/oder das letzte Byte Hauptspeicher ankommt.
Außerdem für Anfänger ziemlich fehleranfällig, es hindert dich ja keiner daran, anschließend, wenn dein Standardanwendungsfall läuft nochmal zu optimieren.
int schonDa(char **a,size_t z,char *s)
{
while( z-- )
if( !strcmp(a[z],s) )
return 1;
return 0;
}
int main()
{
FILE *f=fopen("blafasel.txt","r");
char **strarray=0, zeile[100];
size_t z=0;
while( fgets(zeile,100,f) )
{
if( !schonDa(strarray,z,zeile) )
strarray=realloc(strarray,++z*sizeof*strarray),strcpy(strarray[z-1]=malloc(100),zeile);
}
while( z-- )
puts(strarray[z]),free(strarray[z]);
free(strarray);
fclose(f);
return 0;
}