我需要动态生成如下字符串:
001/192
但是,位数会有所不同,因此我必须定义另一个名为print_width的变量,在这种情况下:192%10
snprintf ( statusString , 30 , "%0*d / %0*d" , snprintf_width , completed[tid] , total[tid]);
上面的代码提出了一个编译器警告:参数太少,而且没有工作
答案 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)
你需要两倍的宽度(你有两次)