读者,
谁能向我解释一下,当我运行这段错误代码时,我的计算机会发生什么。 用gnu gcc编译器编译。在代码块中。
这是错误代码:
char data[5];
data[0] = '1';
data[1] = '10';
data[2] = '30';
data[3] = '50';
if(sizeof(data) == 5)
{
adjust(data);
}
sizeof(data) 是 5,因为我声明了 char data[5]。
如果我尝试读取数据[1],我注意到它将返回最后一个字符。 '0' 或 '48'。
所以我想知道,data[1] 中的“1”会发生什么以及我的内存会发生什么?
最佳答案
您使用像 10
这样的多字 rune 字有点令人困惑,这可能会增加您的困惑。像这样的一行会发生什么:
data[1] = '10';
是:
int
类型(不是char
,在 C 中)值'10'
将被截断到char
- 结果值将分配给
data[1]
。
这个值到底是哪个值取决于编译器,因为文字比单个 char
所能容纳的要大。
如果您看到 0
(在 ASCII 系统上数字为 48),这意味着 10
被截断为 0
,这是存储的值。然后,1
完全丢失(没有存储在数组的相邻槽中,这可能是您所期望的)。
关于C 数组,我的内存会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10681107/