我认为通常你不能增加数组的大小。但如果我这样做:
字符 arr[4];
strncpy(arr,"12347777",8);
它显示当我调用 strlen(arr) 时长度增加了。有人可以向我解释那里发生了什么吗?
您还没有使数组变大。在数组结束后,您踩到了随机的内存块。
strlen
即使在正常情况下,也不返回数组的长度。它表示一个字符串有多长。由于您只是在其中放置了 8 个字符(加上一个空终止符),因此它返回 8。但是,这是未定义的行为!因为你已经损坏了内存,你可能会崩溃,或者它可能会返回一个随机数(根据标准,一切皆有可能)。事实上,在一段不太简单的代码中,这可能会导致崩溃。
你刚刚犯了一个巨大的错误。它可能导致内存损坏和程序行为不端。它不会改变真正的数组大小,但会覆盖数组所在的内存以及后面的内存。因此,您在数组中写入了四个字符{'1', '2', '3', '4'}
,然后{'7', '7', '7', '7'}
写入了以下内存。你很幸运,下一个字节被归零,所以strlen(arr)
显示你的大小为 8。这是简单的错误,你不应该这样做。注意"12347777"
是指向内存的指针{'1', '2', '3', '4', '7', '7', '7', '7', '\0'}
,您只复制了 8 个字符,因此错过了终止零字节。