2011-10-04 3 views
2

je avais besoin pour générer dynamiquement une chaîne comme ce qui suit:snprintf avec "% 0 * d", trop peu d'arguments

001/192

Cependant, le nombre de chiffres varie, ainsi je dois définir une autre variable, appelée print_width, qui est, dans ce cas: 192% 10

snprintf (statusString , 30 , "%0*d/%0*d" , snprintf_width , completed[tid] , total[tid]); 

Le code ci-dessus pose un avertissement du compilateur: trop peu d'arguments, et ne fonctionne pas

+0

Quel avertissement du compilateur? – Joe

Répondre

5

Vous avez besoin d'un argument de largeur entière pour chaque * ainsi que pour chaque d dans le format. Vous avez fourni 3 des 4 arguments requis, et votre compilateur a l'amabilité de vous le dire, plutôt que de produire des erreurs lors de l'exécution.

Ainsi, par exemple:

if (snprintf(statusString, sizeof(statusString), "%0*d/%0*d", snprintf_width, 
      completed[tid], snprintf_width, total[tid]) >= sizeof(statusString)) 
    throw "Oops - string was too small for data"; 
1

vous avez besoin deux fois la largeur (vous avez deux fois *)

Questions connexes