访问 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"));
读取字符串文字的空字符没问题。
在这段代码中,是否有任何可能出错的地方?
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"));
读取字符串文字的空字符没问题。