这是我学校的一个练习题,这不是一个功课问题:
鉴于以下声明,请写一段C代码,这可能导致
strlen(arr)
返回不少于8。char arr[4];
我对这个问题的尝试是:不可能,没有办法实现这一目标。因为strlen会返回一个char数组中的字符数,直到它遇到第一个\ 0,我不知道在这种情况下我们可以让strlen返回8。我想如果我们强制为这个数组分配一个8长的字符串,那么这种行为是不可预测的。
但是,我们的教师给出的解决方案是:
strcpy(arr, Any 8-char-long string);
例如:
strcpy(arr, "Overflow");
我不明白为什么这是有效的,在我的理解中,我没有看到这个数组有足够的空间来容纳这个8长度的字符串,是否有一些我想念C中的字符串?
“鉴于以下声明,请写一段可能导致strlen(arr)返回不少于8的C代码。”
这是不可能的,因为arr
只能容纳3个字符和1个空终止符。
我对这个问题的尝试是:不可能,没有办法实现这一目标
正确。
但是,我们的教练给出的解决方案是:
strcpy(arr, Any 8-char-long string);
你的教练是无能的,不应该教C。这将写出数组的界限,任何事情都可能发生,包括程序崩溃或程序似乎在执行时看起来按预期工作。
我不明白为什么这是有效的
它不是,它调用未定义的行为。