Effectivement, j'ai modifié la fonction dans le commentaire pour quelle gere un NULL de fin plutot qu'un arguments donnant le nombre de resultats.
Enfin tout le monde aura corrigé mais bon:
} while (nom_col);
} while (nom_col);
va_end (ap);
La solution que ta donné Médinoc fonctionne sous linux/x86 elle aussi
Mais je te déconseille fortement cette methode parce que ce n'est absolument
pas portable. Contrairement à ce que semble penser cet "Expert confirmé Senior" les valist sont dépendantes de la plateforme matérielle et non de la plateforme logicielle.
Typiquement ce code fonctionne sur x86 mais à peu de chance de fonctionner sur powerpc par exemple ou plus betement sur Itanium ou en mode x86-64.
Mon conseil: Utilise des appels a snprintf dans une boucle ou autre structure de controle ce sera bcp plus propre.
Exemple en reprenant ton code, transforme:
[^] # Re: Petite précision pour Benoit
Posté par -=[ silmaril ]=- (site web personnel) . En réponse au message tableau comme argument à vsprintf. Évalué à 2.
La solution que ta donné Médinoc fonctionne sous linux/x86 elle aussi} while (nom_col); } while (nom_col); va_end (ap);Mais je te déconseille fortement cette methode parce que ce n'est absolument pas portable. Contrairement à ce que semble penser cet "Expert confirmé Senior" les valist sont dépendantes de la plateforme matérielle et non de la plateforme logicielle. Typiquement ce code fonctionne sur x86 mais à peu de chance de fonctionner sur powerpc par exemple ou plus betement sur Itanium ou en mode x86-64. Mon conseil: Utilise des appels a snprintf dans une boucle ou autre structure de controle ce sera bcp plus propre. Exemple en reprenant ton code, transforme:#include <stdarg.h> #include <stdlib.h> #ifdef __cplusplus #define _ADDRESSOF(v) ( &reinterpret_cast<const char &>(v) ) #else #define _ADDRESSOF(v) ( &(v) ) #endif #define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) #define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) ) #ifdef va_start #undef va_start #endif #define va_start _crt_va_start int main() { char * param[8]; param[0] = NULL; param[1] = "Blabla"; param[2] = "Test"; param[3] = NULL; va_list vl; va_start(vl, param[0]); #if 1 vprintf("%s => %s %d",vl); #else char const *str; while((str = va_arg(vl, char const*)) != NULL) puts(str); #endif va_end(vl); }