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);
我的问题:
- 两者之间有技术上的区别吗?
- 在某些特殊情况下,一个优先于另一个吗?
答案
是的,它们在技术上有所不同。尽管您可能并不在乎微不足道的差异。
例如如果您这样初始化:
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编写安全的字符串复制函数是否有区别?的主要内容,如果未能解决你的问题,请参考以下文章