Maison >développement back-end >C++ >Comment puis-je transmettre un nombre variable d'arguments à printf/sprintf ?

Comment puis-je transmettre un nombre variable d'arguments à printf/sprintf ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 16:26:111010parcourir

How Can I Pass a Variable Number of Arguments to printf/sprintf?

Passer des arguments variables à printf/sprintf

En programmation, il est souvent nécessaire de formater et d'afficher du texte ou des données de longueur variable, une tâche couramment gérée par des fonctions comme printf et sprintf. Cependant, ces fonctions nécessitent généralement un nombre fixe d'arguments. Comment passer un nombre variable d'arguments à ces fonctions ?

La solution : Utiliser les fonctions va_*

Le langage C fournit un ensemble de fonctions préfixées par "va_ " qui nous permettent de travailler avec des listes d'arguments de longueur variable. Ces fonctions incluent va_start, va_arg et va_end.

Pour transmettre un nombre variable d'arguments à printf ou sprintf, nous pouvons utiliser les étapes suivantes :

  1. Déclarer une variable va_list pour stocker la liste d'arguments.
  2. Appelez va_start avec la variable va_list et le dernier connu argument.
  3. Utilisez va_arg pour récupérer chaque argument de la va_list.
  4. Transmettez les arguments récupérés aux fonctions printf ou sprintf.
  5. Appelez va_end pour nettoyer quand terminé.

Exemple :

#include <stdio.h>
#include <stdarg.h>

class MyClass {
public:
    void Error(const char* format, ...) {
        va_list argptr;
        va_start(argptr, format);
        vfprintf(stderr, format, argptr);
        va_end(argptr);
    }
};

Dans cet exemple, la méthode Error prend une chaîne de format et un nombre variable d'arguments. Il utilise va_arg pour récupérer les arguments, puis appelle vfprintf pour formater et afficher le texte sur stderr.

Remarque :

Bien qu'il soit possible d'utiliser vsprintf au lieu de vfprintf, ce n'est pas recommandé car il est sensible aux débordements de tampon.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn