在C中的数组中迭代

Bil*_*lla 1 c arrays

嘿,我有这种类型的东西

eph_t *a;
Run Code Online (Sandbox Code Playgroud)

你可以看到类型是eph_t.它是C中的数组,但我不知道数组的大小,也不知道数组的最终元素是什么.有没有办法,我可以浏览整个数组,因为我想将数组中每个元素的值赋给某些东西.

我可以考虑哪些选择?如果您无法理解问题中的某些内容,只需发表评论,以便我可以通知您.

mat*_*975 7

如果您不知道数组的大小,则迭代它是不安全的.每当您尝试读取最后一个元素之外的元素时,您将获得未定义的行为.没有什么安全的,你可以做,除非你知道数组的大小.

  • @glglgl但是你必须记住确保它到位.鉴于C字符串溢出错误的数量,它显然比看起来更难. (3认同)

dor*_*ron 5

正如其他人所说,当你不知道数组的结尾时,迭代数组是不安全的.这通常以下列方式解决.

  1. 例如,如果您有权访问数组声明(int a[10];).您可以使用sizeof运算符来确定数组的大小.请注意,将指向数组的指针传递给函数时,这将无效.
  2. 使用数组的函数通常会采用直接大小或某种方式来推断大小作为函数的额外参数(这memset是一个很好的例子)
  3. 数组可能有一个特殊的终结符元素(通常在末尾是一个NULL或0元素),这意味着你可能不会迭代超出(C字符串是很好的例子)

因此,如果您正在设计一个以数组作为参数的函数,请使用上述模式.如果您使用的函数不使用上述模式之一,请将问题报告给库设计器作为错误.