If you have lets say a local int
that is uninitialized, then its gets an undefined value but if you have a local char
variable should that not have
Uninitialised means really uninitialised. Just because you consistently get a particular value on your machine at a particular time, doesn't mean that will always be the case all the time on all machines.
You can verify that nothing is initialising your variable by dumping the assembly code for your function and inspecting it.