how to initialize the stack pointer register in main c program
Initialising the stack pointer is one of the things that needs to be done in the startup code - before the "main 'C' program" starts!
See the "MDK-ARM Primer" http://www.keil.com/support/man/docs/gsac/
Configure ARM7/9 Target: www.keil.com/.../gsac_configarm79target.htm
Configure Cortex-M Target: http://www.keil.com/support/man/docs/gsac/gsac_configcortex.htm
But with some processors (for example the Cortex-M3), the setup of the stack pointer etc can be done without any assembler involved. But that is covered in the documentation for the specific processor.
Another thing is that a processor can have multiple stacks, so main() may configure at least some of the stacks depending on processor and protection modes.