C: 你应该给一个字符串数组分配多大的空间来传递给 strcpy,复制到.?

C: What size should you allocate to a string array to be passed to strcpy, to be copied into.?

如果我需要使用 strcpystrncpy 将字符串 src 复制到数组 dest 中,我是否应该分配一个 任意大尺寸的 数组(例如 char dest[1024])或者我应该使用 strlen 之类的东西计算 src 的大小,然后使用 [=17= 动态分配一个块].

第一种方法似乎“更容易”,但我消耗的 space 不会比我需要的多吗?在某些情况下,它甚至可能达不到要求。另一方面,第二种方法似乎更精确,但每次都做起来很乏味,我每次都必须释放内存。

这是个人品味问题,还是上述其中一项优于另一项?

第二种方法比第一种方法更安全。如果您处理的是大字符串,它将失败。 在为新字符串分配内存时,您还应该考虑字符串结束字符“\0”。我

最简单的方法是使用 strdup() function,它有效地将 strlen()malloc()strcpy() 调用合并为一个。您仍然需要调用 free() 以相同的方式释放分配的数据。

这取决于几个因素。

如果你事先知道源字符串的最大大小并且它不是太大(即小于 1K 左右)并且目标不需要在当前函数之后使用 returns , 那么你可以使用固定大小的缓冲区。

如果源字符串可以任意大,或者如果您需要 return 函数中的目标字符串,那么您应该动态分配内存。请注意,如果您使用 malloc (strlen(src) * sizeof(char)),则 1) sizeof(char) 始终为 1,因此您可以省略它,并且 2) 您没有为终止空字节分配 space。所以你需要 malloc (strlen(src) + 1)。此外,如果您的系统具有该功能,您可以使用 strdup 在单个操作中进行分配和复制。