我认为通常你不能增加数组的大小。但是,如果我这样做呢:
夏亚·阿尔[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', ' '}
的内存的指针,并且您只复制了 8 个字符,因此错过了终止零字节。