c - 将数组元素移出数组范围时会发生什么?

标签 c embedded

假设我有一个包含 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] 只是进入 never never land ?我知道在 MATLAB 这样的语言中,它会动态调整数组的大小,但是 C 也会做同样的事情吗?

最佳答案

C 没有边界检查,也不会自动调整数组大小。如果您有一个大小为 100 的数组,并且访问索引 100(因为数组从 0 开始),那么您将直接访问数组缓冲区之外的内存。

最好的情况,它会段错误。但是,由于行为未定义,您可能会覆盖其他变量或执行各种奇怪的操作。

关于c - 将数组元素移出数组范围时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57498290/

相关文章:

c - 读取损坏的文件,段错误

linux - 基于 linux 的嵌入式系统上的根用户

无法从 arduino 发送 RS-232 命令

c - Atmega1 6's PORTs don' 工作

c - 捕获进程进入/退出的任何可能的解决方案?

c - 程序只有在没有连接到真实终端时才会崩溃 - 如何调试?

c - PEM_write_PrivateKey() 函数未将 RSA 私钥存储在 private.pem 文件中

c++ - C 源代码分词器

embedded - STM32F030F4P6 仅在从闪存启动时运行中断处理程序。从引导加载程序启动时重置

c - 如何正确配置PIC18端口D的输出方向?