带有“%0 * d”的snprintf,参数太少

时间:2011-10-04 00:44:08

标签: c++ string-formatting

我需要动态生成如下字符串:

  

001/192

但是,位数会有所不同,因此我必须定义另一个名为print_width的变量,在这种情况下:192%10

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

上面的代码提出了一个编译器警告:参数太少,而且没有工作

2 个答案:

答案 0 :(得分:5)

每个*以及格式中的每个d都需要一个整数宽度参数。你已经提供了3个必需的4个参数,你的编译器很友好地告诉你,而不是在运行时产生垃圾。

因此,例如:

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 :(得分:1)

你需要两倍的宽度(你有两次)