2014-11-20 12 views
5

Sono un amatore completo quando si tratta di C e ho avuto qualche problema nel tentativo di scrivere questo pezzo di codice. Voglio che controlli il file di testo per ogni riga che corrisponde alla stringa specificata.Ricerca file di testo per la stringa corrispondente

Ad esempio, se "stackoverflow" era nel file di testo e la stringa che ho inserito era "www.stackoverflow.com" dovrebbe restituire una corrispondenza positiva.

Ma attualmente sta cercando la stringa all'interno del file di testo, che è l'opposto di quello che voglio. Gradirei qualche suggerimento/consiglio!

int Check(char *fname, char *str) { 
FILE *file; 
int i = 1; 
int r = 0; 
char temp[1000]; 

if((file = fopen(fname, "r")) == NULL) { 
    return(-1); 
} 

while(fgets(temp, 1000, file) != NULL) { 

    if((strstr(temp, str)) != NULL) { 
     printf("Host name found on line: %d\n", i); 
     printf("\n%s\n", str); 
     r++; 
    } 
    i++; 
} 

if(r == 0) { 
    printf("\nHost name not blocked.\n"); 
} 

if(file) { 
    fclose(file); 
} 
return(0); 
} 
+2

Ciao, benvenuto su StackOverflow! Hai provato a cambiare 'strstr (temp, str)' con 'strstr (str, temp)'? –

+0

Sì, ma quando ho provato a non ottenere risultati anche se le stringhe che stavo confrontando erano identiche. – Piglet

+3

Si ricorda che 'fgets' acquisisce una nuova riga finale (' \ n'); potrebbe essere necessario eliminarlo da soli. –

risposta

1

Perché non utilizzare getline() per ottenere un buffer riga per riga e quindi eseguire uno strstr() in quel buffer?

+0

Probabilmente perché [non è una funzione di libreria standard C] (http://stackoverflow.com/questions/13112784/undefined-reference-to-getline-in-c). – usr2564301

Problemi correlati