Tout programmeur C qui a travaillé pendant plus d'une semaine a rencontré des accidents qui résultent de l'appel printf
avec spécificateurs plus de format que les arguments réels, par exemple:Passant trop d'arguments à printf
printf("Gonna %s and %s, %s!", "crash", "burn");
Cependant, sont-il mauvaises choses similaires qui peuvent se produire lorsque vous passez trop nombreux arguments à printf?
printf("Gonna %s and %s!", "crash", "burn", "dude");
Ma connaissance de l'ensemble x86/x64 me porte à croire que cela est sans danger, bien que je ne suis pas convaincu qu'il n'y a pas une condition de bord me manque, et je n'ai aucune idée sur d'autres architectures. Cette condition est-elle garantie pour être inoffensive, ou y a-t-il un piège potentiellement générateur d'accidents ici aussi?
Pas une réponse à votre question, ce Stacker est correct, mais pour les accidents. 'gcc' devrait donner de bons avertissements à ce sujet, donc il n'y a vraiment aucune excuse pour négliger celui-là ;-) –
Comment GCC pourrait-il donner des avertissements pour cela? Considérez que la chaîne de format ne doit pas nécessairement être une chaîne constante. Ca peut être n'importe quel 'char *' –
GCC peut donner de bons avertissements quand il peut connaître la chaîne de format au moment de la compilation. Comme cela représente une grande partie des cas d'utilisation rationnelle de 'printf' et de ses amis, ces avertissements sont précieux et devraient être pris en compte. – RBerteig