![](/img/trans.png)
[英]What will happen if big file will be loaded in memory buffer in C webserver
[英]C arrays, what will happen to my memory
读者,
任何人都可以向我解释当我运行这段错误代码时,计算机中会发生什么。 用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' 。
所以我想知道,数据[1]中的'1'会发生什么,并且我的记忆会发生什么?
您使用的多字符字面量(如10
有点令人困惑,这可能会增加您的困惑。 这样的行会发生什么:
data[1] = '10';
是:
int
类型(在C中不是 char
)的值'10'
将被截断为char
data[1]
。 确切地说,这是哪个值取决于编译器,因为文字大于单个char
。
如果看到0
(在ASCII系统上通常为48),则意味着10
被截断为0
,这是存储的值。 然后, 1
将完全丢失(可能不希望将其存储在阵列的相邻插槽中)。
除了adjust()
的影响之外,发生的情况非常清楚:
data[]
分配了5个元素 data[]
的大小与5进行比较 data[]
开头的指针来调用Adjust() 我不理解您对读取data[1]
的评论data[1]
。 它包含一些未定义的直到分配。
char x = '10';
在大多数架构上与char x = '0'
相同。 这是行为上与c ++的背离。 char
表达式大多以整数形式处理,然后在存储时隐式类型转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.