strcpy vs direct assignment:溢出问题

问题描述 投票:4回答:1

这是我学校的一个练习题,这不是一个功课问题:

鉴于以下声明,请写一段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中的字符串?

c string strcpy
1个回答
3
投票

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

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

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

正确。

但是,我们的教练给出的解决方案是:strcpy(arr, Any 8-char-long string);

你的教练是无能的,不应该教C。这将写出数组的界限,任何事情都可能发生,包括程序崩溃或程序似乎在执行时看起来按预期工作。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.