%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?