OVH Cloud OVH Cloud

regex buggée ?

4 réponses
Avatar
Delf
Bonjour.

Dans un programme, j'utilise des expressions régulières.
Je bloque depuis pas mal *d'heures* sur un problème assez bizarre...

[...]
const char* cformat1 = "^<[?]xml version='1.0'
encoding='UTF-8'[?]><Request><Table>MOD_ALIVE</Table><HOST_NAME>.*</HOST_NAME></Request>$";

const char* cformat2 = (*citer).second->GetXmlRequestFormat().c_str();

if (strcmp(cformat1, cformat2) != 0)
{
std::cout << "DIFF" << std::endl;
}
[...]
Traitement regex
[...]

La méthode GetXmlRequestFormat() me retourne une std::string.

Le code suivant n'affiche jamais le messages 'DIFF', donc :

cformat1 == cformat2

Pourtant, si je construis la regex sur cformat1, la regexp est validée,
si j'utilise cformat2, elle n'est pas validée...

Des idées ? Là, je nage dans le flou...

--
Delf
Do not use this email in Cc!
L'alcool tue lentement. On s'en fout. On n'est pas pressé.

4 réponses

Avatar
Stéphane Zuckerman
On Sat, 27 May 2006, Delf wrote:

Question bête : l'opérateur == est-il surchargé dans ton cas ? Parce que
tu compares deux pointeurs de char, dans la ligne suivante.
cformat1 == cformat2
Et donc, à moins d'avoir effectué une surcharge, il n'y a aucune raison

pour que cformat1 (l'adresse) soit égale à cformat2 (l'adresse).


--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)

Avatar
Delf
Stéphane Zuckerman wrote:

Question bête : l'opérateur == est-il surchargé dans ton cas ? Parce que
tu compares deux pointeurs de char, dans la ligne suivante.
cformat1 == cformat2



Quand j'ai écrit 'cformat1 == cformat2 ', cela ne vient pas du code.
Pour cela j'utilise strcmp(). C'était juste pour bien signaler que les
deux chaînes sont bien égales en contenu.

--
Delf
Do not use this email in Cc!
L'homme n'est que poussière. La femme est aspirateur.


Avatar
Stéphane Zuckerman
On Sat, 27 May 2006, Delf wrote:

Stéphane Zuckerman wrote:

Question bête : l'opérateur == est-il surchargé dans ton cas ? Parce que tu
compares deux pointeurs de char, dans la ligne suivante.
cformat1 == cformat2



Quand j'ai écrit 'cformat1 == cformat2 ', cela ne vient pas du code. Pour
cela j'utilise strcmp(). C'était juste pour bien signaler que les deux
chaînes sont bien égales en contenu.



Oups. Au temps pour moi. Peut-être qu'il s'agit d'une question purement de
langage, et que du coup il faudrait plus aller demander du côté de
fr.comp.lang.c++ ?

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)



Avatar
Delf
Stéphane Zuckerman wrote:

Oups. Au temps pour moi. Peut-être qu'il s'agit d'une question purement
de langage, et que du coup il faudrait plus aller demander du côté de
fr.comp.lang.c++ ?


Je pense pas car le problème vient le regex (regex.h) d'après moi.

Les 2 chaînes sont identiques et pourtant je n'obtiens pes le même
résultat avec l'une ou l'autre...

--
Delf
Do not use this email in Cc!
Tout bonheur commence par un petit déjeuner tranquille.