2011-03-20 5 views
1

Essayez d'écrire une implémentation native de nodejs sprintf tout en améliorant mes compétences en C++, j'ai recherché comment fournir une longueur inconnue d'arguments à sprintf. Je pensais d'abord que je pouvais utiliser vsprintf mais je n'arrivais pas à trouver comment le peupler. Fondamentalement, la liaison nodejs/v8 me donne un tableau d'arguments que je pourrais convertir en un vecteur ou autre chose, mais je ne sais pas comment le convertir en va_list attendu par vsprintf ou toute autre alternative qui pourrait le faire fonctionner.C++ sprintf d'un argument inconnu

Est-ce que quelqu'un pourrait me proposer une stratégie?

d.

Répondre

1

En général, il dépend du compilateur et de la plate-forme. Vous pouvez regarder l'implémentation de va_start et va_arg etc pour votre compilateur de choix, et pousser les données de la bonne manière dans la pile en utilisant la directive asm.

Je ne ferais pas cela cependant, s'il est critique pour votre implémentation d'imiter sprintf - boucle sur les paramètres et les traiter un à la fois en concaténant les résultats, ce serait beaucoup plus robuste et portable.

+0

Assembleur non requis ... vous pouvez organiser les données dans n'importe quel ancien tableau d'octets et créer une 'va_list' qui pointe dessus, puisque' va_list' n'est vraiment qu'un pointeur. Cependant, il serait toujours très spécifique à l'implémentation, et comme il devrait quand même traiter la chaîne de format pour trouver les types de données à stocker, il pourrait aussi bien le traiter au coup par coup que vous le recommanderiez. –