OVH Cloud OVH Cloud

regexp en C

57 réponses
Avatar
Arno
Bonjour,

Voila je veut utiliser regcomp et regexec pour faire des comparaisons. J'ai
donc voulu faire un petit test pour commencer mais cella ne fonctionne pas.
Lors de l'execution, il me dit que les deux chaines ne sont pas les mêmes,
quelqu'un à une idée ?

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <regex.h>

int main (int argc, char **argv)
{
regex_t regexp;

if (!regcomp(&regexp, "192.168.0.22", REG_ICASE))
{
if (regexec(&regexp, "192.168.0.22", 0, NULL, 0))
printf("Match...\n");
else
printf("NO Match...\n");
}
return 0;
}

Merci.

--
Arno - Pour le mail : http://cerbermail.com/?P5oJnDlxNt

7 réponses

2 3 4 5 6
Avatar
Emmanuel Delahaye
K. Ahausse wrote on 03/09/04 :
Il existe de mauvais professionels (trop à mon goût). Je pense que l'un
des buts de ce forum est promouvoir les bonnes pratiques.


Et donc pour faire le ménage parmi les mauvais professionnels il faut jeter
les débutants ?
Il faut aussi jeter ceux qui ne sont plus débutants mais on besoin d'un coup
de main dans des domains particuliers ?

En fait, les seuls qu'il faudrait tolérer sur fr.comp.lang.c. c'est le : bon
professionnel, celui là même qui n'a pas besoin de poser de question.


Je te conseille de te poser un peu et de réfléchir avant de parler. Ton
agressivité n'est pas un gage de sagesse et ne peut pas faire avancer
les choses positivement.

Il n'a jamais été question de jeter intentionellement qui que ce soit.
Je reconnais volontiers que certaines reflexions déplacées ont pu avoir
l'effet redouté, mais ce sont des accidents de parcours. Nul n'est
parfait. Tout le monde commet des erreurs.

On s'efforce simplement de répondre aux questions concernant le langage
(syntaxe, grammaire, bibliothèque standard) et non les applications, et
de mettre en garde sur les risques que font courir certaines pratiques,
notamment celles qui entraînent des problèmes de non portabilité.

Si tu estimes que c'est mal ou améliorable, expose tes propositions
calmement ou mieux, fait directement les contibutions qui te semblent
justes. Mais cesse de porter des accusations gratuites, on va finir par
croire que es un troll.

--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html

"C is a sharp tool"


Avatar
K. Ahausse
"Emmanuel Delahaye" a écrit dans le message de
news:
K. Ahausse wrote on 03/09/04 :
Il existe de mauvais professionels (trop à mon goût). Je pense que l'un
des buts de ce forum est promouvoir les bonnes pratiques.


Et donc pour faire le ménage parmi les mauvais professionnels il faut
jeter


les débutants ?
Il faut aussi jeter ceux qui ne sont plus débutants mais on besoin d'un
coup


de main dans des domains particuliers ?

En fait, les seuls qu'il faudrait tolérer sur fr.comp.lang.c. c'est le :
bon


professionnel, celui là même qui n'a pas besoin de poser de question.


Je te conseille de te poser un peu et de réfléchir avant de parler. Ton
agressivité n'est pas un gage de sagesse et ne peut pas faire avancer
les choses positivement.


Il n'y a nulle agréssivité, c'est juste une réflexion.
Si l'on exclue tous les point de vue, sauf ceux qui recoivent le label "bon
professionnels", je me demande bien qui pourra poser des questions.

[..]

Si tu estimes que c'est mal ou améliorable, expose tes propositions
calmement ou mieux, fait directement les contibutions qui te semblent
justes.


C'est exactement ce que j'ai fait jusqu'à présent. <ironie> Et je te
remercie de ton autorisation de me permettre de m'exprimer.</ironie>


Mais cesse de porter des accusations gratuites, on va finir par
croire que es un troll.




Avatar
K. Ahausse
"Emmanuel Delahaye" a écrit dans le message de
news:
K. Ahausse wrote on 03/09/04 :
Bon, donc, au moins, nous sommes d'accord sur deux points :
- la charte de fr.comp.lang.c parle du langage C, sans mentionner
aucune


norme.


Il est un fait indéniable que le langage C est un langage norlmalisé
dont la définition s'impose à tout le monde. Si on parle de langage C
sans autreprécisions, c'est de celui-ci que l'on parle, sinon, il fait
préciser de quel langage régional il s'agit : Turbo C, GNU-C etc.



Réponse trop alambiquée. Quel rapport avec la charte ?


- d'après la norme C99, un programme écrit en langage C peut être
non-portable.


Bien sûr, l'important est de bien faire la différence, ce qui n'est pas
du tout évident pour un débutant, surtout si les réponses partent dans
tous les sens et commencent à utiliser des 'régionalismes', d'où une
certaine rigueur (appelle la rigidité si ça te fait plaisir) que tu
n'aimes pas, mais que d'autres apprécient.



Réponse trop alambiquée. Quel rapport avec la norme C99 ?


Grosso-modo, je comprends que pour tirer bénéfice d'une "certaine rigueur"
rigide, il ne faut pas tenir compte de la charte, et il ne faut pas tenir
compte de la norme.

Y'a comme truc qui me choque ...


Avatar
Emmanuel Delahaye
K. Ahausse wrote on 03/09/04 :
Réponse trop alambiquée. Quel rapport avec la charte ?


C'est surtout plein de fautes de frappes... Je recommence:

"Il est un fait indéniable que le 'langage C' est un langage normalisé
dont la définition s'impose à tout le monde. Si on parle de 'langage C'
sans autres précisions, c'est de celui-ci que l'on parle, sinon, il
faut
préciser de quel langage régional il s'agit : Turbo C, GNU-C etc."

Qu'est-ce que tu ne comprends pas dans ce texte ? Le rapport avec la
charte est que celle-ci parle de 'langage C'. Je m'efforce d'en trouver
une définition claire. Avant de savoir si on est hors-sujet ou non, il
me parait important de commencer par définir de quoi on parle, non ?

- d'après la norme C99, un programme écrit en langage C peut être
non-portable.


Bien sûr, l'important est de bien faire la différence, ce qui n'est pas
du tout évident pour un débutant, surtout si les réponses partent dans
tous les sens et commencent à utiliser des 'régionalismes', d'où une
certaine rigueur (appelle la rigidité si ça te fait plaisir) que tu
n'aimes pas, mais que d'autres apprécient.



Réponse trop alambiquée. Quel rapport avec la norme C99 ?


Qu'est-ce que tu ne comprends pas dans ce texte ?

Grosso-modo, je comprends que pour tirer bénéfice d'une "certaine rigueur"
rigide, il ne faut pas tenir compte de la charte, et il ne faut pas tenir
compte de la norme.


Je pense que pour le moment, tu n'as rien compris...

Y'a comme truc qui me choque ...


Jusque là, tu semble être le seul à ne pas comprendre... Relis tout ça
après avoir dormi, ça ira peut être mieux.

--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html

"C is a sharp tool"



Avatar
Anthony
Erwan David wrote:

"K. Ahausse" écrivait :

Et donc pour faire le ménage parmi les mauvais professionnels il faut
jeter les débutants ?


Il faut justement apprendre aux débutants à faire la différence entre
ce qui relève du langage et ce qui relève de la plateforme. Et c'est
pas en mélangeant tout qu'il pourra apprendre.



Mais en fait le but de ce mini troll qui a débuté était de savoir si il
fallait répondre par des <HS> partout !

En clair, est ce que la question de l'OP que j'ai remis dans mon post devait
subir ce traitement. Dans le cas de l'OP on voit qu'il n'est pas si
débutant que ca cependant il a fait une erreur sur l'interpretation d'un
if() ou d'une doc, je pense que ce genre de questions peut avoir sa place
ici car la fonction est une fonction POSIX dont tout le monde peut avoir la
doc avec les man sur le net et qui est largement utilisée je pense. Enfin
je me dis que POSIX est assez répendu et les questions purement posix sont
assez rare pour qu'on puisse les tolérer ici. je me trompe ?

Anthony
--
It's a bird.. It's a plane..
No, it's KernelMan, faster than a speeding bullet, to your rescue.
Doing new kernel versions in under 5 seconds flat..
-- Linus, in the announcement for 1.3.27


Avatar
Antoine Leca
En , Emmanuel Delahaye va escriure:
Essayons d'être clair.


Essayons de nourrir le troll.

La charte dit que le sujet principal est 'Le Langage C'.


Tiens, je n'ai pas la même version de la charte que toi.
Ma version parle de « discussions autour du langage C ». Sans capitale, et
sans exclusive sur le sujet des dites « discussions ».


Comment est défini le langage C ? Par une norme internationale de type
ISO.


Entre autres. Tu sais très bien que c'est aussi (et pas seulement) défini
par les implémentations de la dite norme, couramment dénommé « les
compilateurs ».


Cette norme constitue le noyau dur du langage (The Core) composé
d'une syntaxe, d'une grammaire et d'une bibliothèque de fonctions.


Et d'un paquet d'explications autour. En particulier, il y a une section
intitulée « Conformité ».


Elle a l'avantage de définir un langage commun et portable
indépendemment de la machine. Tout code posté ici respectant cette
norme peut être compilé et testé par n'importe quel intervenant
disposant d'une machine avec une compilateur.


Ouh là là....

SEUL le code strictement conforme dispose de ce privilège sans discussion
(parce que c'est l'objet de la norme.) Mais la norme ne définit pas
seulement la notion de stricte conformité, elle définit aussi la notion de
conformité simple. Et il n'y a pas dans le texte de la norme d'ostracisme
envers cette dernière catégorie.
De fait, du code conforme avec tous les compilateurs jouirait du même
privilège de portabilité, mais on voit bien qu'il est difficile de définir
cette catégorie (l'ensemble de ces codes-là n'est pas compact).

D'autre part, il existe des tonnes d'exemples de codes qui ne respectent pas
les critères définis, et qui pourtant sont intéressants dans le cadre des
« discussions sur le langage C ». Par exemple, les codes proposées par les
débutants, accompagnés de la question « où est mon erreur ? »

(Bon OK, il y a aussi la plupart des réponses... ;-))


D'autre part, il existe de nombreuses extensions au langage C,


« Extensions » suggère que ces "choses" ne sont pas du langage C. Mais
alors, qu'est-ce donc ?


- Des bibliothèques plus ou moins portables
- Des fonctions systèmes avec interface C (POSIX ou non)
- L'assembleur inline
- Des mots clés et types spécifiques (interrupt, far, int64 etc.)

Ces extensions ne font pas partie de la définition du langage C et ne
peuvent donc pas être discutées ici, surtout que dans la plupart des
cas, il existe un forum spécialisé.


Bon alors, l'assembleur intégré, cela me semble effectivement aller de soi,
je ne vois pas pourquoi tu cites cela (et il en va de même des questions sur
les outils de génie logiciel genre make, qui fleurissent de temps à autre et
certainement beaucoup plus souvent.)

Tu as aussi raison de mentionner que lorsqu'il y a des forums spécialisés,
il est de bon ton de rediriger les ingénus poseurs de questions vers les
lieux où la connaissance est censée se trouver (et je ne peux m'empêcher
d'ajouter que parfois, la connaissance se trouve plutôt ici, donc que c'est
parfois une bonne idée pour celui qui veut une réponse à son problème plutôt
que respecter à tout prix la tranquilité du groupe, même si cela coûte à
certains habitués de voir passer des messages sans intérêt.)

Pour ce qui est des bibliothèques, le problème, c'est que l'intérêt unique
et exclusif du C, ce pourquoi ce langage a survécu quand tant d'autres de la
même époque ont sombré, c'est parce que... des bibliothèques portables
d'utilitaires ont été développées...
Et il se trouve en plus que regexp est une de ces bibliothèques...


Enfin, nous (professionels)


Et nous, les amateurs (éclairés), serions-nous moins conscients de cette
nécessité ? ;-)

considérons qu'il est important de bien
distinguer le noyau du langage de ses extensions, afin d'être capable
d'écrire du code le plus portable possible. Nous n'avons pas
l'intention de promouvoir des pratiques menant à la non-portabilité ou
à l'ecriture de code non réutilisable ou immaintenable.


D'où l'idée de promouvoir autant que faire se peut l'utilisation de
regexp...


Bon, fini de rire.

Le vrai problème, c'est de savoir si le traffic de fclc est tel qu'il
devient impossible de subir une question sur un sujet non traité dans les
saintes écritures (chapitres 6 et 7) par semaine ? Et si la réponse est
peut-être négative en ce qui concerne comp.lang.c (mais cela fait longtemps
que j'ai décroché du fait de l'ampleur du traffic), je ne pense pas que la
situation en soit arrivée à un point de non-retour ici (vous avez le droit
de ne pas être d'accord).

De plus, la logique de Usenet, c'est que dans ce cas-là, il faut couper le
groupe en plusieurs (au vu de cette enfilade, le candidat le plus évident
serait fr.comp.lang.c.posix ou quelque chose d'approchant); cependant, j'ai
un doute sur le fait qu'un AÀD sur un tel sujet embrase les foules.

Ce qui n'est pas ÀMHA acceptable, c'est de décider que le groupe devriat
être fermé aux discussions sur des sujets « qui ne nous intéressent pas »;
et que pour ce faire, on renverrait les poseurs de questions impertinentes
vers des groupes où l'on ne sait absolument pas s'il y a une quelconque
chance que la question soit en fait résolue. Cela me parait d'une
impolitesse grave vis-`s-vis de celui à qui on répond, mais de plus cela me
parait parfaitement inutile, car d'autres répondants, qui par ailleurs
savent de quoi ils retournent dans « l'autre groupe » (en général parce
qu'ils y participent), vont répondre à la question « pour aider ».

Dans le même ordre d'idée, et toujours à propos des questions courantes
concernant les fonctions et interfaces spécifiées par la norme Posix (au
hasard), je rappelle aux débutants sur Usenet l'existance d'un mécanisme
nommé "Suivi redirigé vers": quand vous répondez à une question qui à votre
sens n'est pas du ressort du groupe, il faut:
- s'abtenir de réduire autant que d'habitude la question originale, pour
garder le contexte nécessaire à la réponse (précaution inutile vu que ces
temps-ci, beaucoup répètent intégralement...)
- metter en copie le groupe adapté
- et rediriger la discussion vers le dit groupe en mettant son nom dans la
case "Suivi vers" (follow-up).
Évidemment, pour pouvoir faire cela, cela suppose que vous soyez un habitué
du groupe objet de le redirection, ou à tout le moins que vous ayez suivi
son évolution; sinon c'est de la goujaterie.
Si vous vous contentez de mentionner "cette question est hors-sujet", cela
n'a aucun effet: le questionneur négligera votre remarque, et la seule chose
dont il se souviendra, c'est qu'il a été répondu à sa question sur fclc,
donc que là il y a des gens qui savent... Par contre, si vous le forcer à
lire la suite sur un autre groupe, d'abord nous serons vraiment débarrassés,
et de plus il y a de bonnes chances qu'il apprenne des choses intéressantes
sur le sujet qui l'intéresse: gagnant-gagnant. Mais pour cela, il faut bien
sûr que ce soit une redirection à bon escient.

Bon, là je crois que le clou est bien enfoncé, non;
je peux vous laisser passer à l'article suivant ;-)


Antoine

Avatar
Antoine Leca
En 4138cb23$0$20482$, Anthony va escriure:
En clair, est ce que la question de l'OP que j'ai remis dans mon post
devait subir ce traitement. [...]


Je ne sais si ce qui pose le plus problème c'est la question ou ta réponse.

Au départ, l'erreur est un classique C (se tromper sur la comparaison de
strcmp() par rapport à 0, comme d'ailleurs tu l'as fort bien fait
remarquer.)

Mais voilà, au lieu de signaler l'erreur et de faire juste le lien avec
strcmp(), tu as cité Linux, le fait que ce soit HS etc., bref tu as fait
rentrer à la fois le loup et le renard dans une bergerie où il n'y avait
qu'un petit lynx...


la fonction est une fonction
POSIX dont tout le monde peut avoir la doc avec les man sur le net et
qui est largement utilisée je pense.


Ah.

« Je pense »...

Enfin je me dis que POSIX est assez répendu


En fait, Posix n'est pas si répandu que cela (je te laisse décider s'il faut
le pendre ou le re-pendre; et même _qui_ il faut pendre, même si àmha
certains pourraient être visés... :-D )

En dehors du monde Linux (où le mot Posix sert parfois à cacher la forêt
Gnu), Posix (qui est confiné presqu'exclusivement à *nix) est surtout
utilisé par les gens qui se préoccupe de portabilité (àmha la meilleure
raison pour répondre à ce genre de question, soit dit en passant), mais cela
ne veut surtout pas dire que tous ceux qui programment en C pour des
machines Unix respectent les normes Posix (ou même des sous-ensembles de
celles-ci), LOIN de là...
Surtout que nos joyeux vendeurs de matériel cherchent par tous les moyens,
de leur côté, à empêcher les gentils utilisateurs-programmeurs d'utiliser
les fonctions portables, afin de les cadenasser chez eux, à grand coup de
"avec mon implémentation tip top vous pouvez faire du [insérez ici
l'argument marketing qui va bien]".

De plus, dans Posix il y a de tout, de quoi faire son marché et de quoi
perdre son temps à flâner. Si Posix.1 est largement reconnu et apprécié, les
autres avatars ont des succès variés... et fluctuants. Ainsi, Posix.2 au
début a été plutôt boudé (je trouve). Les threads ont mis du temps à
demarrer (faute d'implémentation). Les extensions des expressions régulières
pour gérer les classes de caractères, quand on peut les éviter, c'est
souvent un soulagement. Etc.


Bon enfin, au passage, la bibliothèque regexp est largement disponible
au-delà du monde Posix. Ce n'est pas parce que cela n'est pas disponible
dans le système d'exploitation à [jeter par les] fenêtres que c'est
forcément du Posix...


et les questions purement posix sont assez rare pour


Il me semble qu'il y a largement plus de questions "purement posix" que de
questions "purement win32"...


Antoine

2 3 4 5 6