3 votes

c imprimer la liste des arguments en utilisant va_list

J'ai une simple liste d'arguments. Et je veux juste l'imprimer sur stdout, mais j'obtiens une sortie câblée avant d'imprimer "end". Quelqu'un sait-il d'où viennent cette ligne vide et ces caractères illisibles ?

sortie :

start
hello
hello2
hello3
hello 4

UHAWAVAUATE1S1HHHE
end

void printTest(const char* msg, ...) {

    va_list ap;
    int i;
    const char* curMsg=0;
    va_start(ap, msg);
    printf("start\n");

    for(curMsg= msg ;  curMsg!=0 ; curMsg = va_arg(ap,  const char*)){
        printf("%s\n", curMsg);
    }
    printf("end\n");
    va_end(ap);
}

int main(){

    printTest("hello", "hello2", "hello3", "hello 4");
    return 0;
}

5voto

R.. Points 93718

Comment voulez-vous lire un pointeur nul pour terminer la boucle alors que vous n'en passez pas ? Changez l'appel à :

printTest("hello", "hello2", "hello3", "hello 4", (char *)0);

4voto

Jonathan Wood Points 26443

La liste va_list n'est pas terminée par NULL. En fait, elle ne fournit aucune information sur le nombre d'arguments qu'elle contient. Vos arguments doivent fournir une indication sur le nombre d'arguments qu'il y a. Par exemple, avec printf(), l'argument format indique le nombre d'arguments supplémentaires à traiter.

Si vous avez besoin que la liste soit terminée par NULL, vous devrez passer NULL comme dernier argument.

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