访问 char 数组末尾的“\0”会导致 C 中的未定义行为吗?

Would accessing a "\0" at the end of a char array result in undefined behavior in C?

在这段代码中,是否有任何可能出错的地方?

int min(int x, int y, int z) {
  if (x < y) {
    if (x < z)
      return x;
    else
      return z;
  } else if (y < z) {
    return y;
  } else
    return z;
}

int d(char* a, char* b, int n, int m) {
  if (n == 0)
    return m;
  if (m == 0)
    return n;
  if (a[n-1] == b[m-1])
    return d(a, b, n-1, m-1);
  return 1 + min(d(a, b, n, m-1), d(a, b, n-1, m),d(a, b, n-1, m-1));
}

int main() {
  printf("%d ", d("1111", "1100", 4, 4));
  printf("%d ", d("01", "1100", 2, 4));
  printf("%d", d("araba", "aba", 6, 3)); /// here
}

请注意,在最后一个函数调用中,为函数提供的字符数组的大小比应有的大小

基本上

a[5] 被访问,即使 a 的大小是 5。

我所知道的是,因为指向字符串文字的 char 指针在末尾有 /0;所以虽然不确定,但这不是越界访问。

这是计算机奥林匹克训练营选拔测试中的一道题,由于未给出原因而被取消。我在想这是否是正确的决定,在此先感谢。

“即使 a 的大小为 5”--> "araba" 的大小为 6。

尝试

printf("%zu\n", sizeof("araba")); 

读取字符串文字的空字符没问题。