// result must be long enough for result + 1 ('\0'). Max length required is:
// strlen('18,446,744,073,709,551,615')+1 = 27
// returns pointer to result
static char* ulong_to_str(unsigned long num, char* result)
{
  int digits = num_of_digits(num);
  int num_commas = (digits-1) / 3;

  int i;
  char *p = result + digits + num_commas;

  *p = '\0';
  p--;

  for(i = 0; i < digits; i++)
  {
    if(i > 0 && i % 3 == 0)
    {
      *p = ',';
      p--;
    }

    *p = '0' + (num % 10);
    p--;
    num /= 10;
  }

  return result;
}
示例#2
0
文件: ft_itoa.c 项目: votiv/VotivRepo
char		*ft_itoa(int n)
{
	char	*ret;
	int		i;
	int		sign;
	int		len;

	len = num_of_digits(n);
	ret = (char *)ft_memalloc(sizeof(*ret) * (len + 1));
	n = check_num(n, &sign, &ret);
	if (ft_strlen(ret) != 0)
		return (ret);
	if (ret == NULL)
		return (NULL);
	i = 0;
	while (n > 0)
	{
		ret[i] = (n % 10) + 48;
		n /= 10;
		i++;
	}
	ret = finish_ret(sign, ret, i);
	return (ret);
}