:
#include <algorithm>
#include <cstddef>
#include <cassert>
inline void
unsigned_to_decimal( unsigned long number, char* buffer, std::size_t size)
{
std::size_t i = size;
buffer[size - 1] = '0';
for (unsigned long n ;(n = number) > 0 && i > 0 ;) {
buffer[--i] = '0' + n - (10 * (number /= 10));
}
assert(number == 0);
std::fill(buffer,buffer + (i - (i == size)),' ');
}
:
#include <iostream>
#include <string>
#include <climits>
#include <array>
constexpr std::size_t decimal_digits(unsigned long n)
{
return n / 10 > 0 ? 1 + decimal_digits(n / 10) : 1;
}
int main()
{
const std::size_t max_digits = decimal_digits(ULONG_MAX);
std::cout << "Print decimal 0, UINT_MAX, ULONG_MAX "
"from left-padded char buffer, size " << max_digits << ":-\n";
for (auto ul : std::array<unsigned long,3>{0,UINT_MAX,ULONG_MAX}) {
char buf[max_digits];
std::fill(buf,buf + max_digits,'?');
std::cout << '[' << std::string(buf,buf + max_digits) << "]\n";
unsigned_to_decimal(ul,buf,max_digits);
std::cout << '[' << std::string(buf,buf + max_digits) << "]\n";
}
return 0;
}
:
Print decimal 0, UINT_MAX, ULONG_MAX from left-padded char buffer, size 20:-
[????????????????????]
[ 0]
[????????????????????]
[ 4294967295]
[????????????????????]
[18446744073709551615]
(g++ -Wall -std = ++ 11 -pedantic, GCC 5.3.1)