C: 你应该给一个字符串数组分配多大的空间来传递给 strcpy,复制到.?
C: What size should you allocate to a string array to be passed to strcpy, to be copied into.?
如果我需要使用 strcpy
或 strncpy
将字符串 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
在单个操作中进行分配和复制。
如果我需要使用 strcpy
或 strncpy
将字符串 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
在单个操作中进行分配和复制。