1

我认为通常你不能增加数组的大小。但如果我这样做:

字符 arr[4];

strncpy(arr,"12347777",8);

它显示当我调用 strlen(arr) 时长度增加了。有人可以向我解释那里发生了什么吗?

4

2 回答 2

3

您还没有使数组变大。在数组结束后,您踩到了随机的内存块。

strlen即使在正常情况下,也不返回数组的长度。它表示一个字符串有多长。由于您只是在其中放置了 8 个字符(加上一个空终止符),因此它返回 8。但是,这是未定义的行为!因为你已经损坏了内存,你可能会崩溃,或者它可能会返回一个随机数(根据标准,一切皆有可能)。事实上,在一段不太简单的代码中,这可能会导致崩溃。

于 2014-02-25T07:42:09.340 回答
0

你刚刚犯了一个巨大的错误。它可能导致内存损坏和程序行为不端。它不会改变真正的数组大小,但会覆盖数组所在的内存以及后面的内存。因此,您在数组中写入了四个字符{'1', '2', '3', '4'},然后{'7', '7', '7', '7'}写入了以下内存。你很幸运,下一个字节被归零,所以strlen(arr)显示你的大小为 8。这是简单的错误,你不应该这样做。注意"12347777"是指向内存的指针{'1', '2', '3', '4', '7', '7', '7', '7', '\0'},您只复制了 8 个字符,因此错过了终止零字节。

于 2014-02-25T07:42:52.640 回答