Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1689 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Aide sur memcmp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide sur memcmp

n°2103482
sal1
Posté le 27-09-2011 à 10:39:21  profilanswer
 

Bonjour à tous,
 
Voici mon code source dans lequel j'ai deux problèmes probablement liés :  
 
void Remplace(char *strChaine,char *strRecherche,char *strRemplace)
{
 char *pstrChaine,*pstrResultat;
 long nLongRecherche,nLongRemplace;
 char strResultat[4096];
 
 memset(strResultat,0,sizeof(strResultat));
 
 pstrChaine  =strChaine;
 pstrResultat=strResultat;
 
 nLongRecherche=strlen(strRecherche);
 nLongRemplace =strlen(strRemplace);
 
 while (pstrChaine!=NULL)
 {
   
 
  if(!memcmp(pstrChaine,strRecherche,nLongRecherche))
  {
   pstrChaine=pstrChaine + nLongRecherche;
   memmove(pstrResultat,strRemplace,nLongRemplace);
   pstrResultat=pstrResultat + nLongRemplace;
  }
  else
  {
   *pstrResultat=*pstrChaine;
   pstrChaine++;
   pstrResultat++;
  }
 }
 strcpy(strChaine,strResultat);
}

 
Principe de la fonction : Remplace dans ma chaine strChaine la chaine strRecherche par la chaine strRemplace
 
J'ai un problème de core dumped sur cette fonction et plus précisement (grâce à gdb) au niveau de la ligne if(!memcmp(pstrChaine,strRecherche,nLongRecherche)).
 
En analysant j'ai deux problèmes, d'une part le while ne s'arrète jamais d'où le core dumped et d'autre part j'ai l'impression que le memcmp ne marche pas.
 
Voici comment la fonction est appelée :  
 
strRequete[4096];
memset(strRequete, 0, sizeof(strRequete));
...
...
..
 
Remplace(strRequete,"min(","" ); // en gros je supprime le min( de ma requête
 
 
Merci d'avance pour votre aide
 
 
 
 

mood
Publicité
Posté le 27-09-2011 à 10:39:21  profilanswer
 

n°2103554
sal1
Posté le 27-09-2011 à 14:45:20  profilanswer
 

Bon finalement j'ai corrigé le problème.
J'ai remplacé la ligne du while : while (pstrChaine!=NULL)  
par : while (pstrChaine[0])
 
du coup ma boucle s'arrète bien à la fin de la chaîne de caractère et je n'ai plus de core dumped.
 
Maintenant je ne sais toujours pas pourquoi le premier ne marche pas alors qu'il me semblait correct.
 
Concernant mon problème au niveau du memcmp, bah en fait il y en a pas, ça marche nickel c'est juste que je lisais mal la log  :heink:  
 
Si quelqu'un sait pourquoi le "while (pstrChaine!=NULL)" ne marchait pas je suis preneur.
 
Merci d'avance  
 

n°2103558
olivthill
Posté le 27-09-2011 à 15:09:10  profilanswer
 

pstrChaine est l'adresse mémoire d'un caractère, donc ce n'est jamais nul.
 
Il aurait fallu écrire *pstrChaine pour dire de prendre le contenu à l'adresse mémoire indiqué par pstrChaine.
 
L'écriture toto[n] est équivalente à *(toto + n).

Message cité 1 fois
Message édité par olivthill le 27-09-2011 à 15:09:30
n°2103569
sal1
Posté le 27-09-2011 à 16:12:05  profilanswer
 

olivthill a écrit :

pstrChaine est l'adresse mémoire d'un caractère, donc ce n'est jamais nul.
 
Il aurait fallu écrire *pstrChaine pour dire de prendre le contenu à l'adresse mémoire indiqué par pstrChaine.
 
L'écriture toto[n] est équivalente à *(toto + n).


 
Donc si j'ai bien compris, à partir du moment où mon pointeur a été initialisé et que je fais déplacé celui-ci "bloc par bloc" il aura toujours comme valeur l'adresse mémoire d'un caractère.
 
OK c'est noté  ;)  
 
Encore merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Aide sur memcmp

 

Sujets relatifs
[RESOLU] insert/update ifnull/ifnotnullDemande d'aide : Manipulation de fichier texte en .csv
Slider plein ecran - probleme IE - besoin d'aideBesoin d'aide pour un SELECT multitables
EXCEL besoin d'aide pour graphique SVP [resolut]Aide pour compilation Webpart Sharepoint 2010
Besoin d'aide logiciel VB.net (pour étiquettes d'adresses postales)Meilleur logiciel pour création site Web
Aide pour Google Maps[Résolu] [debutant] aide javascript
Plus de sujets relatifs à : Aide sur memcmp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR