You've got some kind of [XY-problem](https://meta.stackoverflow.com/questions/66377/what-is-the-xy-problem).

The truth is: it's IDA who so to say "changes" the name of (something she thinks is) a function from absolutely nothing to `sub_{address}`. Why on earth would `PE-file` have non-exported symbols stored in it? Some kind of masochism? To give a candy to reversers?

Thus, you have at least three ways of dealing with your problem:

  - pray and hope that IDA's [FLIRT](https://www.hex-rays.com/products/ida/tech/flirt/in_depth.shtml) will heuristically recognize `printf`;
  - `link` your program with debug-info: [`-debug`](http://msdn.microsoft.com/en-us/library/aa235413.aspx) which tells linker to generate [`pdb`](http://en.wikipedia.org/wiki/Program_database)-file which IDA will query for all the symbols stored for your application;
  - tell linker to [`-export:printf`](http://msdn.microsoft.com/en-us/library/aa235424.aspx) so that it's name will be in export directory and you can get it's address easily even programmatically.