Salut,
Voilà le tit problème :
Le système, développé en C, sur lequel je bosse s'interface avec un système SAP. Je récupère de celui-ci des chaines références (éléments standardisés) et un format à la mode sprintf.
Le nombre de chaines transmises est variables et non contrôlé. Pour cela, je devrais recevoir un char ** qui contient mes références.
Exemple :
mon char ** contient 3 chaines : chaine1/chaine2/chaine3
mon format est le suivant :
"L'objet de reference %s ne peut être associé à l'objet de reference %s sur le plan %s".
De mon côté je dois associer le format et les chaines afin d'afficher un message à l'utilisateur du style :
L'objet de reference "chaine1" ne peut être associé à l'objet de reference "chaine2" sur le plan "chaine3".
Comme ça rien de compliqué mais le message à afficher pouvant être variable et le nombre de références aussi, il a été décidé de réaliser une interface portable. Vous me direz "s'il passent à la fois le format et les chaines à y intégrer pourquoi se tracasser et ne pas passer directement la chaine déjà construite"?
En fait, de notre côté les références passées par SAP, qui ont une signification pour le système, doivent d'abord passer par une moulinette assez complexe pour être traduites et avoir une signification pour l'utilisateur. On se trouve donc plutôt avec un système comme suit :
mon char ** contient 3 chaines : chaine1/chaine2/chaine3
mon format :
"L'objet de reference %s ne peut être associé à l'objet de reference %s sur le plan %s".
ma moulinette :
moulinette(&chaine1) => chaine1bis
moulinette(&chaine2) => chaine2bis
moulinette(&chaine3) => chaine3bis
L'objet de reference "chaine1bis" ne peut être associé à l'objet de reference "chaine2bis" sur le plan "chaine3bis".
Voilà pour que vous connaissiez le contexte de mon problème, maintenant la question :
Le problème peut se traiter par travail sur la chaine directement, je sais faire mais j'aime pas trop.
J'ai vu qu'il était possible de faire un truc de ce style :
Avec ça je pourrait traiter de façon sympa ma liste variable d'arguments.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <stdarg.h> void traiteArgs(char *format, ...) { char s[500]; va_list argptr; int cnt; va_start(argptr, format); cnt = vsprintf(s, format, argptr); va_end(argptr); printf(s); }
Mais va_list est un objet créé par le compilateur C que je ne maîtrise pas.
Moi, ce que je reçois est une série de chaines et un format, je voudrais pouvoir créer le va_list avec ces chaines. Est-ce possible? Merci de vous pencher sur le problème...
![]()
NB : en fait le problème vient du fait qu'en C on ne puisse pas (à ma connaissance) construire une chaine avec une fonction et ses arguments puis la faire évaluer... pour exécuter la fonction appelée dans la chaine... si vous avez une ouverture là dessus je suis preneur.
Partager