#c #string-formatting
#c #форматирование строки
Вопрос:
Мне нужно было динамически генерировать строку, подобную следующей:
001 / 192
Однако количество цифр меняется, поэтому я должен определить другую переменную, называемую print_width , которая в данном случае равна: 192 % 10
snprintf ( statusString , 30 , "%0*d / %0*d" , snprintf_width , completed[tid] , total[tid]);
Приведенный выше код выдал предупреждение компилятору: слишком мало аргументов и не работает
Ответ №1:
Вам нужен аргумент целочисленной ширины для каждого *
, а также для каждого 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";
Ответ №2:
вам нужна ширина в два раза (у вас есть * дважды)