C: 你应该为一个字符串数组分配多大的空间,以便传递给 strcpy 并复制到其中?

问题描述

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

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

这是个人品味的问题还是上述中的一个比另一个更可取?

解决方法

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

,

第二种方法比第一种方法更安全。如果您正在处理大字符串,它将失败。 在为新字符串分配内存时,您还应该考虑 END OF STRING 字符 '\0'。我

,

这取决于几个因素。

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

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