这是我学校的一个练习题,不是家庭作业问题:
给出以下声明,编写一段可能会 导致
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语言中的字符串时会怀念什么吗?
答案 0 :(得分:3)
“给出以下声明,编写一段C代码,可能导致strlen(arr)返回不少于8。”
这是不可能的,因为arr
只能容纳3个字符和1个空终止符。
我对这个问题的尝试是:不可能,没有办法实现这一目标
正确。
但是,我们的讲师提供的解决方案是:
strcpy(arr, Any 8-char-long string);
您的讲师没有能力,不应该教C。这将超出数组的范围,并且可能发生任何事情,包括程序崩溃或程序 seeming 可以按预期的方式工作这次执行。
我不明白为什么这是有效的
不是,它会调用未定义的行为。