【发布时间】:2012-09-28 09:02:52
【问题描述】:
我正在读一本关于计算机/密码学等的书。作者经常使用 strncpy(dest, src, strlen(src)); 而不是 strcpy(dest, src); 这对我来说没有多大意义。好吧,我是一名专业程序员。
问题是:它真的有真正的不同吗?真正的应用程序使用这样的东西?
【问题讨论】:
-
我不明白为什么
strncpy(dest, src, strlen(src));会比strcpy(dest, src);快。 -
@Mysticial 它的速度是一样的(尽管 strlen 增加了使用它的开销)。速度不是使用它的原因。防止缓冲区溢出是首选的原因。 (
strncpy与strcpy的速度相同。假设复制相同数量的字符,内部速度相同。)顺便说一句,第三个参数不应该是字符串长度,而是而不是 dest 缓冲区的大小(或者可能是减 1 的大小)。 -
@Mystical 刚刚意识到您不是提问者,因此我之前的一半评论只是漫无边际。会留下之前的评论,但万一提问者确实觉得它有用,并且它接近长度限制,所以不能在那里写这个注释:)。
标签: c performance optimization