chercher, remplacer avec une condition
Bonjour,
En guise de fonction chercher/remplacer, j'ai utilisé celle donnée ici : http://www.daniweb.com/code/snippet216517.html
La chaine de caractère que je veux modifier est en fait une requête pour une base de données Sqlite. Dans cette requête, je veux doubler les apostrophes au milieu des mots mais pas les apostrophes qui délimitent chaque entrée. Pour cela, j'ai voulu tester si l'apostrophe était derrière un signe '=', devant une virgule ou à la fin de la chaine et dans ce cas, sauter l'occurence.
J'avais donc modestement pensé écrire ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
char *str_replace(const char *src, const char *from, const char *to)
{
size_t size = strlen(src) + 1;
size_t fromlen = strlen(from);
size_t tolen = strlen(to);
char *value = malloc(size);
char *dst = value;
if ( value != NULL )
{
for( ;; )
{
const char *match = strstr(src, from);
//Si une occurence est trouvée, on teste le caractère précédent et le suivant pour savoir si on réalise le remplacement de from par to
if (match != NULL && !!strncmp(match-1,"=",1) && !!strncmp(match+1,",",1) && !!strncmp(match+1,"\0",1))
{
size_t count = match - src;
char *temp;
size += tolen - fromlen;
temp = realloc(value, size);
if (temp == NULL)
{
free(value);
return NULL;
}
dst = temp + (dst - value);
value = temp;
memmove(dst, src, count);
src += count;
dst += count;
memmove(dst, to, tolen);
src += fromlen;
dst += tolen;
}
else
{
strcpy(dst, src);
break;
}
}
}
return value;
} |
Mais la condition du 2e if ne semble jamais remplie. Or en testant juste la partie :
Code:
if(!!strncmp(match-1,"=",1) && !!strncmp(match+1,",",1) && !!strncmp(match+1,"\0",1))
J'obtiens bien la réponse voulue, c'est-à-dire que j'obtiens bien les valeurs TRUE et FALSE aux bons moments suivant les différentes occurences de la chaine testée. Une chaine qui pourrait être par exemple :
Code:
UPDATE people SET name='Paul',observation='C'est n'importe quoi'
Deviendrait :
Code:
UPDATE people SET name='Paul',observation='C''est n''importe quoi'
Je ne comprends pas pourquoi ce n'est pas le cas dans la fonction complète et j'ai donc besoin de votre aide pour savoir ce que je fais mal.
Merci pour votre aide !