URL: https://linuxfr.org/forums/programmation-c--2/posts/tableau-comme-argument-%C3%A0-vsprintf Title: tableau comme argument à vsprintf Authors: SteffaneL Date: 2006年07月20日T21:58:50+02:00 Tags: Score: 0 Je cherche à construire un buffeur pour une requete SQL et je ne connais pas le nombre d'arguments que je doit passer. EXEMPLE, SI j'ai un nombre d'argument fixe, je fait : char param1[12], param2[12]; char *format="UPDATE t_table set col1='%s', col2='%s'"; ...... sprintf(buff,format,param1,param2); Mais dans le cas present je ne sait pas quelles colonnes seront mise a jour, Je construis ma chaine "UPDATE .." par concatenation avec les colonnes necessaires; char format[100]="UPDATE t_table set "; int i=0; char *param[8]; if( bon1 ){ strcat( fromat," col1='%s',"); param[i++]=param1;} if( bon2 ){ strcat( fromat," col2='%s',"); param[i++]=param2;} *param[i]=NULL; /* avec ou sans ça meme resultat */ .. /* et je voudrais faire un truc comme ça */ vsprintf( buff,format,param); ET ça sa ne marche pas (Memory fault) vsprintf veut un va_list pour troisième argument. Mon problème est donc de donner un tableau à "v/sprintf" plutot qu'une liste en troisieme argument. Si je mets *param[i++]=NULL; au début , pas de Memory fault mais rien à la place des %s. Si je mets va_start(ap, param[0]); /*ou va_start(ap, param); */ J'ai erreur à la compilation : "symbole non defini : ... " je crois que les "..." correspondent aux ... donnés en 2eme parametre à une fonction dont le nombre d'arguments est variable. (ap est bien declaré en va_list) REM sur un autre forum on m'a donner une solution pour Windows, et ils sont tres heureux de prétendent pour faire ça sous Windows et que c'est impossible sous Linux ......... @+