// 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; }
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); }