I don’t know of an easy way in C to print a number with commas, yet large numbers are very common, and very hard to read without commas. This routine converts a long int to a string and inserts commas. It can be called multiple times within a subroutine call without overwriting the returned string.

```/*
*================================================================
* Convert a (possibly very large) number to a string with commas every
* three digits.  This can be called up to LNC_RETURNS times within a
* single printf or other function.  Positive and negative numbers are
* okay.
*
* This will need changes for localization.
* Thanks to Judy for improved algorithm.
*----------------------------------------------------------------
*/

char*
Lib_numberComma(
long n)			// IN: number to be comma-ized
{
#define LNC_RETURNS 9		// max times called within one function
#define LNC_MAXSIZE 32		// maximum size of a stringized long int

int		 commas;	// # of commas to insert.
char*	 char_move_p;	// Move chars around.
int		 digits;	// # of digits in the number.
int		 digits_sign;	// # of digits plus 1 if negative.
char*	 return_p;
static void* ss_id = NULL;

// Convert the number to a string.
return_p = Lib_ss(&ss_id, LNC_RETURNS, LNC_MAXSIZE);
sprintf(return_p, "%ld", n);

// How many commas will we need to insert?
digits_sign = strlen(return_p);
digits = digits_sign;
if (*return_p == '-') {
// ...ignoring any "-" sign.
digits--;
}
commas = (digits - 1) / 3;

// Make sure we have an appropriately-placed NUL.
char_move_p = return_p + digits_sign - 1;	// Point at last char.
*(char_move_p + commas + 1) = '\0';

// Move characters over and insert commas.
for (; commas > 0; commas--) {
*(char_move_p + commas) = *char_move_p; char_move_p--;
*(char_move_p + commas) = *char_move_p; char_move_p--;
*(char_move_p + commas) = *char_move_p; char_move_p--;
*(char_move_p + commas) = ',';
}

return return_p;
}
```