2014-10-09 105 views
0

就像标题所说。我的印象是,字符与short short unsigned int相同,允许0到255之间的任何值。根据Visual Studio上的调试器,每当我声明char时,它将从-52 'Í'开始。为什么会出现这种情况,这怎么可能?未初始化字符为什么以及如何在C中以-52开始?

+0

只要'signed char'可以包含基本执行字符集,'char'可以在执行时自行决定是否签名或未签名。没有像“short short unsigned int”这样的东西。你不能依赖未初始化的值为'-52'。 – 2014-10-09 02:40:40

+3

它从垃圾值开始,因为您尚未初始化它。 – dasblinkenlight 2014-10-09 02:41:11

+1

我意识到,没有这样的东西,短的无符号整数;这就是为什么我说“会”。 – Smurfton 2014-10-09 03:14:01

回答

3

char是否带或在你的情况下,未签名是签名的,这是不确定的,这是覆盖在其中说,草案C99标准节6.2.5类型

三种类型Char,符号的字符,和无符号字符统称为 ,称为字符类型。应定义炭到 执行具有相同的范围,表示和行为作为有符号 char或unsigned char.35)

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

因为我们正在谈论的Visual Studio,它会根据维基百科的文章Magic number (programming)出现它使用CC标记未初始化堆栈内存:

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

这将解释您看到的-52,但这不应该被认为是可靠的,不便携。应该注意的是,使用不确定值会调用未定义的行为。

3

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

+0

更多关于这个http://stackoverflow.com /问题/ 370195 /时,和为什么,意志的-OS-初始化内存到0XCD-0xdd-等-上自由的新的malloc, – 2014-10-09 03:57:45