raoulman
Messages postés40Date d'inscriptionvendredi 14 mars 2003StatutMembreDernière intervention21 avril 2007
-
22 oct. 2006 à 15:11
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
22 oct. 2006 à 22:35
Bonjour,
J'utilise strstr et _strrev pour rechercher un mot dans une chaine. Si je le fais dans mon main, je n'ai pas de problèmes, mais si je le mets dans une fonction que j'appelle dans mon main, cela me cause une violation de partage. Si je ne garde que strstr cela fonctionne. Le problème, c'est que je suis tout petit petit en C et je n'arrive pas à trouver de solutions. Si une bonne âme pouvait m'aider ? Ci-dessous le code.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 22 oct. 2006 à 15:43
strstr() retourne un const char* donc on ne peut pas écrire dessus,ce que tu veux faire avec _strrev : il faudrait copier la chaîne d'abord. Dans ce cas, pense à initialiser coupe_chaine avec assez de place. De plus, tu devrais sécuriser un peu le code (si strstr retourne un pointeur null ou ne trouve pas l'instance etc...).
Bonne prog.
raoulman
Messages postés40Date d'inscriptionvendredi 14 mars 2003StatutMembreDernière intervention21 avril 20071 22 oct. 2006 à 16:08
Merci pour ton aide juju12 mais une petite question, tu fais ton strcpy avec "coupe_chaine" ou "remet" en source ?
Parce que ce que je désire récupéré c'est ce que contient "remet" et si j'essaye un strcpy dans ma fonction "recherche" j'ai toujours un plantage.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 22 oct. 2006 à 16:45
Parce que ta fonction telle qu'elle contient des trucs intuiles : tu isoles le mot que tu cherches alors qu'en fait tu l'as déjà dans 'occurence'. En fait on peut tout remplacer par un truc genre:
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 oct. 2006 à 17:59
char *pFndStr=strstr(chaine,occurence);
if(pFndStr != 0) // si la chaine n'est pas égal a zero
*(pFndStr+strlen(occurence)) = 0; // chaine trouvé et on ajoute 0 final
else // sinon
return; // pas trouvé la chaine on quitte
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 oct. 2006 à 18:45
Ok je comprend vaguement ce que tu veux faire. J'ai refais la fonction. Si l'occurence est trouvé, elle l'affiche et retourne 1. Sinon, elle affiche "occurence non trouve" et retourne 0:
int recherche (char * chaine, char * occurence)
{
char *c, buffer[256]; int len 0, pos 0, retval = 0;
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 oct. 2006 à 18:50
Cependant, attention. Dans cette fonction, on suppose qu'occurence ne pèsera jamais plus de 255 caractères. Si il y en a plus, il y aura débordement tampon.
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 22 oct. 2006 à 21:41
il a déjà sa chaine « occurence », pourquoi la dupliquer s'il la trouve!?
dans le code de SAKingdom, il n'a qu'a faire :: printf("%s\n", occurence); dans son while(), pourquoi copier occurence dans buffer ???
juju12, en C, strstr() retourne un « char* », pas un « const char* »
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 oct. 2006 à 22:35
Dans ce context, il n'y a aucun interet. D'ailleur, si il ne veut que faire ça (tester si la valeur est présente), même pas besoin de créé une fonction. Suffit simplement de tester le pointeur retourné et voilà. Cependant, cette fonction pourrait s'avérer utile si on récupère quelque chose en plus qui se situe après (ou avant qui sais) l'occurence. Mais ici, c'est inutile en effet.