har*_*ari 17 c copy c-strings strncpy
我应该怎么用,当我要复制src_str
到dst_arr
,为什么?
char dst_arr[10];
char *src_str = "hello";
Run Code Online (Sandbox Code Playgroud)
PS:我的头正在读的东西很多关于如何纺纱后比我的电脑硬盘快好或坏的strncpy
和strlcpy
.
注意:我知道strlcpy
无处不在.这不是问题所在.
AnT*_*AnT 31
strncpy
当您的目标字符串为零终止时,它永远不是正确的答案.strncpy
是一个旨在与非终止固定宽度字符串一起使用的函数.更准确地说,其目的是将以零结尾的字符串转换为非终止的固定宽度字符串(通过复制).换句话说,strncpy
这里没有意义.
你这里有真正的选择是间strlcpy
朴素strcpy
.
当您想要执行"安全"(即可能被截断)复制时dst_arr
,使用的正确功能是strlcpy
.
至于dst_ptr
......没有"复制到dst_ptr
" 这样的东西.您可以复制到指向的内存dst_ptr
,但首先必须确保它指向某处并分配该内存.有很多不同的方法可以做到这一点.
例如,您可以dst_ptr
指向dst_arr
,在这种情况下答案与前一种情况相同 - strlcpy
.
或者您可以使用分配内存malloc
.如果您为字符串保证分配的内存量足够(即至少strlen(src_str) + 1
分配了字节数),那么您可以使用plain strcpy
或even memcpy
来复制字符串.strlcpy
在这种情况下没有必要也没有理由使用,虽然有些人可能更喜欢使用它,因为它以某种方式给他们带来额外安全感.
如果你故意分配更少的内存(即你希望你的字符串被截断),那么strlcpy
就成为正确使用的函数.
strlcpy()
比strncpy()
你更安全,你也可以使用它.
没有它的系统通常会有s_strncpy()
相同的功能.
注意:在dst_ptr
指向某些内容之前,您无法复制任何内容