Aide sur memcmp - C - Programmation
Marsh Posté le 27-09-2011 à 14:45:20
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
Si quelqu'un sait pourquoi le "while (pstrChaine!=NULL)" ne marchait pas je suis preneur.
Merci d'avance
Marsh Posté le 27-09-2011 à 15:09:10
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).
Marsh Posté le 27-09-2011 à 16:12:05
olivthill a écrit : pstrChaine est l'adresse mémoire d'un caractère, donc ce n'est jamais nul. |
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
Marsh Posté le 27-09-2011 à 10:39:21
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