69 votes

appelez printf en utilisant 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'avoir:

 Test print string 55

En fait, j'obtiens une sortie de déchets. Qu'est-ce qui ne va pas dans ce code ?

87voto

Oli Charlesworth Points 148744

Utilisez plutôt vprintf()

71voto

onteria_ Points 18947

Au lieu de printf , je vous recommande d'essayer vprintf , qui a été créé dans ce but précis :

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

void errmsg( const char* format, ... )
{
    va_list arglist;

    printf( "Error: " );
    va_start( arglist, format );
    vprintf( format, arglist );
    va_end( arglist );
}

int main( void )
{
    errmsg( "%s %d %s", "Failed", 100, "times" );
    return EXIT_SUCCESS;
}

La source

4voto

Constantinius Points 13708

Ce n'est pas ainsi que vous utilisez printf() . Si vous souhaitez utiliser va_lists , utilisez plutôt vprintf() Regardez ici pour référence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X