Приведите ширину uint32_t
к int
. @ Камил Цук
// printf("%*" PRIo32 "\n", w, p);
printf("%*" PRIo32 "\n", (int) w, p);
При необходимости выявлять экстремальные случаи
assert(w <= INT_MAX);
printf("%*" PRIo32 "\n", (int) w, p);
Никаких предположений о int
диапазоне не требуется.
Глубже
Обратите внимание, что один отпечаток с огромной шириной может вызвать проблемы из-за ограничений по окружающей среде . Ширина выше 4095 или около того может просто не работать.
Ограничения среды Число символов, которое может быть получено при любом одном преобразовании, должно быть не менее 4095. C17dr § 7.21.6.1 15
Код может использовать нижеследующее для обработки патологически больших значений ширины - хотя это неэффективно.
uint32_t w2 = w;
while (w2 > 100) {
w2--;
putchar(' ');
}
printf("%*" PRIo32 "\n", (int) w2, p);