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
不是,它调用了未定义的行为。
这是我学校的练习题,不是作业题:
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
不是,它调用了未定义的行为。