为什么以及如何在C中以-52开始未初始化的char?

时间:2014-10-09 02:37:51

标签: c visual-studio-2012

就像标题所说的那样。我的印象是char与short short unsigned int相同,允许从0到255的任何值。根据Visual Studio上的调试器,每当我声明char时,它都从-52 'Í'。为什么会这样,这怎么可能?

2 个答案:

答案 0 :(得分:3)

在您签名的情况下,未指定char是已签名还是未签名,这在C99标准部分6.2.5 Types 草案中有所说明:

  

共有三种类型char,signed char和unsigned char   称为字符类型。实现应定义char to   具有与签名相同的范围,表示和行为   char或unsigned char.35)

未初始化的自动变量具有不确定的值,因此它们的初始值是不可预测的。

由于我们讨论的是Visual Studio,根据维基百科文章Magic number (programming),它会使用CC标记单位化堆栈内存:

  

由Microsoft的C ++调试运行时库和许多DOS使用   用于标记未初始化堆栈内存的环境。 CC类似于   x86处理器上INT 3调试断点中断的操作码。

这将解释您所看到的-52,但这不应被视为可靠且不可移植。应该注意的是,使用indeterminate值会调用未定义的行为。

答案 1 :(得分:3)

因为Visual Studio会在调试模式下将堆栈内存初始化为0xCC,所以0xCC是int 3(中断指令)的机器代码,0xCC是十进制的-52。