appel à l'aide de printf va_list
void TestPrint(char* format, ...)
{
va_list argList;
va_start(argList, format);
printf(format, argList);
va_end(argList);
}
int main()
{
TestPrint("Test print %s %d\n", "string", 55);
return 0;
}
J'ai besoin d'obtenir:
Test print string 55
En fait, je reçois des ordures de sortie. Quel est le problème dans ce code?
Vous devez vous connecter pour publier un commentaire.
Utilisation
vprintf()
à la place.Au lieu de printf, je vous recommande d'essayer vprintf au lieu de cela, qui a été créé dans ce but précis:
Source: http://www.qnx.com/developers/docs/6.5.0/index.jsp?topic=/com.qnx.doc.neutrino_lib_ref/v/vprintf.html
Comme d'autres l'ont souligné déjà: Dans ce cas, vous devez utiliser
vprintf
à la place.Mais si vous voulez vraiment pour envelopper
printf
, ou souhaitez-vous envelopper d'une fonction qui n'ont pas dev...
version, vous pouvez le faire dans GCC en utilisant le non-standard__builtin_apply
fonctionnalité:Le dernier argument de
__builtin_apply
est le max. taille totale des arguments en octets. Assurez-vous que vous utilisez une valeur ici qui est assez grand.__builtin_apply()
doit analyser la pile d'appel des cadres afin de connaître la valeur sur son propre. Mais cela dépend de l'architecture du si et à quel point ce serait le travail. Une fois, j'ai greffé une solution similaire pour moi. C'était horrible.Ce n'est pas la façon dont vous utilisez
printf()
. Si vous souhaitez utiliserva_lists
, utilisezvprintf()
à la place. Regarder ici premier plan de référence.