c++ - 数组包含的内容超出了应有的范围

标签 c++ arrays arduino

<分区>

我有:

int arraySize(int arr[]) {
  int size = 0;
  for(int i=0;i>-1;) {
    Serial.println(arr[i]);
    if(arr[i] != NULL) {
      size++;
      i++;
    }
    else {
      break;
    }
  }
  return size;
}

void loop() {
  int stuff[2] = {5, 6};

  arraySize(stuff);
  delay(2000);
}

应该只打印出 2 个项目(5 和 6),但我得到了 5、6、13312、23296。

出了什么问题?

最佳答案

忽略在整数溢出时遇到的未定义行为的可能性,并假设数组中不存在会中断循环的 0for (int i = 0; i >-1 ;) 将无限循环,因为您只会递增 i

唉,你不能诉诸巧妙的技巧来获取传递给函数的数组的长度。读取数组越界索引的行为是未定义

处理此问题的正常方法是跟踪数组的大小(作为 size_t 类型)并将其传递给需要该数组的函数。另一种选择是使用魔数(Magic Number)来表示数组的结尾,就像 C 风格字符串的 NUL 终止符一样。

关于c++ - 数组包含的内容超出了应有的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48713066/

相关文章:

arrays - Swift Accelerate 计算均值和标准差

python - Arduino 到 Raspberry crc32 检查

c++ - 二维数组/在 c++ (Arduino) 中初始化数据

c++ - 为什么基指针值存储在堆栈中

c++ - 我能否将我的 Dev C++ 或任何其他 C++ 兼容的 IDE 配置为在我创建的每个新源文件中自动包含一些代码?

c++ - 在cuda中将3D阵列展平为1D

c - 如何在 C 中对 'æ' 、 'ø' 和 'å' 进行操作

c# - asp C# 如何在同一个程序中通过串口读取和发送数据

c++ - sscanf 麻烦吗?

c++ - 基于模板的动态数据类型选择