在C语言中,数组是以0为起始索引的,而不是1。所以a[0].s[5]实际上是访问了a[0].s字符串中的第6个字符,即索引为5的字符。如果a[0].s数组长度不够长,那么就会访问到其他的内存空间,这是一种越界访问。但是,由于a[1].s在内存中紧接着a[0].s的后面,所以a[0].s[5]实际上访问到了a[1].s的第2个字符。所以输出的结果是a[1].s[1]。

对于a[0].b[5],它是访问a[0].b数组中的第6个元素,由于a[0].b数组的长度为5,所以a[0].b[5]实际上访问到了数组之外的内存空间。在C语言中,当访问超出数组边界时,没有明确的规定会发生什么。所以输出的结果是不确定的,可能是0,也可能是其他的值,具体取决于该内存位置的值或者垃圾值。

C语言数组越界访问:a[0].s[5]访问a[1].s[1]的原因

原文地址: http://www.cveoy.top/t/topic/1uI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录