在C中增加数组大小的奇怪方法?

时间:2014-02-25 07:33:31

标签: c arrays strncpy

我通常认为你无法增加数组的大小。 但是,如果我这样做:

  

char arr [4];

     

函数strncpy(ARR, “12347777”,8);

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

2 个答案:

答案 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个字符,因此错过了终止零字节。