strcpy与直接分配:溢出问题

时间:2019-04-25 06:36:16

标签: c string strcpy

这是我学校的一个练习题,不是家庭作业问题:

  

给出以下声明,编写一段可能会   导致strlen(arr)返回不少于8。

char arr[4];

我对这个问题的尝试是:不可能,没有办法实现这一目标。由于strlen将返回char数组中的char数,直到遇到第一个\ 0为止,所以我看不到有任何情况下可以让strlen返回8。我认为,如果我们强制为该数组分配8个长度长的字符串,则该行为是无法预测的。

但是,我们的讲师提供的解决方案是:

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

例如:

strcpy(arr, "Overflow");

我不明白为什么这是有效的,据我了解,我看不到该数组有足够的空间来容纳这个8长度的字符串,我在理解C语言中的字符串时会怀念什么吗?

1 个答案:

答案 0 :(得分:3)

  

“给出以下声明,编写一段C代码,可能导致strlen(arr)返回不少于8。”

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

  

我对这个问题的尝试是:不可能,没有办法实现这一目标

正确。

  

但是,我们的讲师提供的解决方案是:strcpy(arr, Any 8-char-long string);

您的讲师没有能力,不应该教C。这将超出数组的范围,并且可能发生任何事情,包括程序崩溃或程序 seeming 可以按预期的方式工作这次执行

  

我不明白为什么这是有效的

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