Bon j'ai pas bien tout compris ce que tu voulait faire.
Si tu veut une fonction capable de te generer une chaine SQL
d'update pour une liste d'arguments fournis alors tu peut
utiliser les va_list.
Sache toutefois que tu doit fournir lors de l'appel de la fonction
une information permettant de determiner la fin des arguments.
Cela peut etre un nombre, un argument avec une signification
spéciale ...
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
void create_update(char *table, ...) {
char *format;
va_list ap;
char *nom_col, *val_col;
int buf_s = 1000, i = 0;
format = (char*) malloc (buf_s * sizeof(char));
i += snprintf(format, buf_s, "UPDATE %s SET ", table);
buf_s -= i;
/* Analyse des arguments */
va_start (ap, table);
do {
if (nom_col = va_arg(ap, char *)) {
val_col = va_arg(ap, char *);
i += snprintf(format + i, buf_s, "%s='%s', ",
nom_col, val_col);
buf_s -= i;
} while (nom_col);
}
va_end (ap);
format[i-2] = 0;
printf(format);
}
int main() {
create_update ("toto",
"nom", "Steff",
"prenom", "aneL",
"niveau", "debutant", NULL);
return 1;
}
Sinon si tu ne connait pas le nombre d'arguments lors de la compilation alors tu va devoir enchainer des appels a *printf
comme j'ai fait dans la fopnction ci dessus.
voili voila,
Ce genre de connerie est quand meme plus simple a faire
en utilisant un langage adapté (perl/python/pike/....) voire meme
en C++
Pour ton exemple sous windows paste le lien que l'on rigole nous
aussi.
# Veni, Vidi, et pas compris ;)
Posté par -=[ silmaril ]=- (site web personnel) . En réponse au message tableau comme argument à vsprintf. Évalué à 2.
#include <stdio.h> #include <stdarg.h> #include <stdlib.h> void create_update(char *table, ...) { char *format; va_list ap; char *nom_col, *val_col; int buf_s = 1000, i = 0; format = (char*) malloc (buf_s * sizeof(char)); i += snprintf(format, buf_s, "UPDATE %s SET ", table); buf_s -= i; /* Analyse des arguments */ va_start (ap, table); do { if (nom_col = va_arg(ap, char *)) { val_col = va_arg(ap, char *); i += snprintf(format + i, buf_s, "%s='%s', ", nom_col, val_col); buf_s -= i; } while (nom_col); } va_end (ap); format[i-2] = 0; printf(format); } int main() { create_update ("toto", "nom", "Steff", "prenom", "aneL", "niveau", "debutant", NULL); return 1; }Sinon si tu ne connait pas le nombre d'arguments lors de la compilation alors tu va devoir enchainer des appels a *printf comme j'ai fait dans la fopnction ci dessus. voili voila, Ce genre de connerie est quand meme plus simple a faire en utilisant un langage adapté (perl/python/pike/....) voire meme en C++ Pour ton exemple sous windows paste le lien que l'on rigole nous aussi.