strcpy 与直接赋值:溢出问题

strcpy vs direct assignment: Overflow issue

这是我学校的练习题,不是作业题:

Given the following declaration, write a snippet of C code that might lead to strlen(arr) returning no less than 8.

char arr[4];

我对这道题的尝试是:不可能,没有办法实现。由于 strlen 将 return char 数组中的字符数,直到它遇到第一个 \0,我看不出在这种情况下无论如何我们可以让 strlen return 8。我认为如果我们强制为这个数组分配一个 8 长度的字符串,行为是不可预测的。

然而,我们导师给出的解决方案是:

strcpy(arr, Any 8-char-long string);

例如:

strcpy(arr, "Overflow");

我不明白为什么这是有效的,根据我的理解,我没有看到这个数组有足够的 space 来容纳这个 8 长度的字符串,我是否想念这个字符串在 C 中?

"Given the following declaration, write a snippet of C code that might lead to strlen(arr) returning no less than 8."

这是不可能的,因为 arr 只能容纳 3 个字符和 1 个空终止符。

My attempt to this question is: impossible, there is no way to achieve this

正确。

However, the solution that our instructor gives is the: strcpy(arr, Any 8-char-long string);

你的老师不称职,不应该教 C。这将超出数组的范围,任何事情都可能发生,包括程序崩溃或程序 似乎 工作按照预期这次执行

I don't understand why this is valid

不是,它调用了未定义的行为。