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

dai*_*isy 2 c++ string-formatting

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

001/192

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

snprintf ( statusString , 30 , "%0*d / %0*d" , snprintf_width , completed[tid] , total[tid]);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ler 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";
Run Code Online (Sandbox Code Playgroud)