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

标签 c arrays strncpy

<分区>

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

char arr[4];

strncpy(arr,"12347777",8);

它显示当我调用 strlen(arr) 时长度增加了。 谁能给我解释一下那里发生了什么?

最佳答案

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

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

关于c - 在 C 中增加数组大小的奇怪方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22007486/

相关文章:

c - 数值微分方程求解器算法意外出现段错误

c - 不允许 malloc()?

c - 如何使带字符的开关盒工作?

python - 防止 numpy 创建多维数组

javascript - 需要帮助使字符串输入返回一个统计字母对频率的直方图

c++ - 将 strncpy 放入一个没有空终止符空间的字符串中是否安全?

memcpy - strncpy/memcpy/memmove是逐字节还是以另一种有效方式复制数据?

c - 在 C 中帮助处理这个参差不齐的数组/子字符串程序?

java - 在 Java 中查找 List 中具有重复项的唯一元素

c - 使用 strncpy。 Valgrind 抛出无效读取