strncat和strncpy编写安全的字符串复制函数是否有区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strncat和strncpy编写安全的字符串复制函数是否有区别?相关的知识,希望对你有一定的参考价值。

我遇到了两种流行的方式来编写可移植并符合C89的安全复制功能。

示例1:

strncpy(dst, src, size);
dst[size - 1] = '\0';

示例2:

dst[0] = '\0'
strncat(dst, src, size - 1);

我的问题:

  1. 两者之间有技术上的区别吗?
  2. 在某些特殊情况下,一个优先于另一个吗?
答案

是的,它们在技术上有所不同。尽管您可能并不在乎微不足道的差异。

例如如果您这样初始化:

char dst[] = "abcdefg";
char src[] = "12";
size_t size = sizeof dst;

然后带有“示例1”,dst变为0x31 0x32 0x00 0x00 0x00 0x00 0x00 0x00

[使用“示例2”,dst变为0x31 0x32 0x00 0x64 0x65 0x66 0x67 0x00

如果只想复制字符串,则区别无所谓。

很难说哪个更好。但是在size很大而src很小的情况下,使用“示例1”方法设置所有结尾的空字符可能会使程序变慢。

以上是关于strncat和strncpy编写安全的字符串复制函数是否有区别?的主要内容,如果未能解决你的问题,请参考以下文章

c strncpy strncat函数 demo

模拟实现atoi strncat strncpy(注释)

模拟实现atoi strncat strncpy(注释)

字符串函数的介绍与模拟实现

strncpy()函数的功能

strncpy()函数的功能