snprintf с «% 0 * d», слишком мало аргументов

#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:

вам нужна ширина в два раза (у вас есть * дважды)