# How to printf “unsigned long” in C?

## The Question :

362 people think this question is useful

I can never understand how to print unsigned long datatype in C.

Suppose unsigned_foo is an unsigned long, then I try:

• printf("%lu\n", unsigned_foo)
• printf("%du\n", unsigned_foo)
• printf("%ud\n", unsigned_foo)
• printf("%ll\n", unsigned_foo)
• printf("%ld\n", unsigned_foo)
• printf("%dl\n", unsigned_foo)

And all of them print some kind of -123123123 number instead of unsigned long that I have.

527 people think this answer is useful

%lu is the correct format for unsigned long. Sounds like there are other issues at play here, such as memory corruption or an uninitialized variable. Perhaps show us a larger picture?

33 people think this answer is useful
• %lu for unsigned long
• %llu for unsigned long long

30 people think this answer is useful

For int %d

For long int %ld

For long long int %lld

For unsigned long long int %llu

23 people think this answer is useful

Out of all the combinations you tried, %ld and %lu are the only ones which are valid printf format specifiers at all. %lu (long unsigned decimal), %lx or %lX (long hex with lowercase or uppercase letters), and %lo (long octal) are the only valid format specifiers for a variable of type unsigned long (of course you can add field width, precision, etc modifiers between the % and the l).

9 people think this answer is useful
int main()
{
unsigned long long d;
scanf("%llu",&amp;d);
printf("%llu",d);
getch();
}



This will be helpful . . .

9 people think this answer is useful

The format is %lu.

Please check about the various other datatypes and their usage in printf here

The correct specifier for unsigned long is %lu.