gpt4 book ai didi

c - strncpy 和 snprintf 之间的区别?

转载 作者:太空狗 更新时间:2023-10-29 15:56:32 27 4
gpt4 key购买 nike

有什么区别

strncpy(dst, src, n)

snprintf(dst, n, "%s", src)

在尝试进行有界字符串复制时,我应该选择其中一种吗?如果是这样,为什么?

最佳答案

strncpy 不是有界 strcpy。这是一个固定长度(非有界,固定长度)的操作,目标不是 C 字符串(以 null 结尾)而是一个 null-padded 字段,就像在某些类型的数据中使用的那样70 年代和 80 年代初的记录表。它基本上没有现代用途,除非您真的想要这种行为,否则不应使用它。

snprintf 是“有界 strcpy”的规范 C 函数。在 POSIX 系统上,strnlen+memcpy 将是另一个不错的选择,如果您需要支持长于 INT_MAX 的字符串,则这是必需的。如果您没有 strnlen,您可以使用 memchr 轻松创建并执行相同的操作。

请注意,snprintf 的简单使用在限制从源读取多少的意义上并不是“有限制的”;它必须读取整个源字符串以确定返回值,这既会产生时间成本,又取决于源是否为有效(终止)字符串。如果你希望它在源和目标的意义上都有界,你可以这样做:

snprintf(dest, n, "%.*s", (int)n-1, src);

但是,这非常不合惯用且容易出错,因此我只使用 strnlenmemcpy 代替。

关于c - strncpy 和 snprintf 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com