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