2015-12-06 2 views
-2

Je travaille sur un programme où je voudrais trouver une correspondance dans une chaîne. J'utilise la fonction strstr() pour faire le travail, mais il a un comportement étrange. J'utilise fgets() pour lire la chaîne, puis en utilisant strstr() pour trouver une correspondance, mais elle renvoie toujours la valeur null si la chaîne n'est pas exactement la même que la correspondance.strstr() retourne toujours

Par exemple:

>string to search match in : This is testing environment 
>match : test 
>returns : (null) 

>string to search match in : test 
>match : test 
>returns : test 

Pourquoi faut-il se comporter de cette façon et puis-je résoudre ce problème?

+3

Comment appelez-vous 'strstr'? Pouvons-nous voir du code? – Kevin

+2

Veuillez prendre le temps de lire [les pages d'aide] (http://stackoverflow.com/help), en particulier les sections intitulées ["Quels sujets puis-je poser à ce sujet?"] (Http://stackoverflow.com/help)/sur le sujet) et ["Quels types de questions devrais-je éviter de poser?"] (http://stackoverflow.com/help/dont-ask). Aussi s'il vous plaît [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask). Vous pouvez également apprendre à créer un [exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). –

+2

Vous savez que les "chaînes" lues via 'fgets()' contiennent généralement la nouvelle ligne de fin utilisée pour les entrer? – alk

Répondre

1

Utilisez l'approche suivante

char *p = strchr(match, '\n'); 
if (p) *p = '\0'; 

p = strstr(source, match); 
+1

Ou juste de faire correspondre [strcspn (match, "\ n \ r")] = '\ 0'; 'pour couper toute sorte de suite de nouvelle ligne. – alk

+0

Puisque le retour à la ligne sera toujours à la fin, et le cas habituel est qu'il sera là (le retour à la ligne n'étant pas là est le cas exceptionnel) pourquoi ne pas utiliser 'strrchr'? Ou simplement vérifier le dernier caractère? :) –

+0

@JoachimPileborg Pourquoi rechercher la dernière occurence du caractère de nouvelle ligne au lieu de rechercher la première occurence? :) –