说我有一个包含100个元素的数组。同一数组仅填充元素0到69,因为这是捕获的所有数据,而70到99是零。
在传输数组中的数据之前,必须将消息的开头添加到开头,并且必须在收集数据后将其插入。
要插入数据,请使用for循环将数组元素向右手动移位n(请参见下面的代码)。
uint8_t foo[100];
/*
* Some code that puts data in the first 70 elements
*/
//Need to insert the start of message
for(i=99; i>0; i--)
{
foo[i+1] = foo[i];
}
在该for循环的第一次运行中,它使foo [100] = foo [99]。这是有效的操作吗,或者foo [100]只是进入永不落地?我知道在像MATLAB这样的语言中,它将动态调整数组的大小,但是C是否做同样的事情?
答案 0 :(得分:0)
C没有边界检查,它不会自动调整数组大小。如果您有一个大小为100的数组,并且访问了索引100(因为数组从0开始),那么您将直接在数组缓冲区之外访问内存。
最佳情况,它会隔离故障。但是,由于行为是不确定的,因此您可能会覆盖其他变量或做各种奇怪的事情。