有些人似乎认为 C 的strcpy()
功能是坏的或邪恶的。虽然我承认通常最好使用它strncpy()
来避免缓冲区溢出,但以下(strdup()
对于那些没有幸运拥有它的人的函数实现)安全地使用strcpy()
并且永远不应该溢出:
char *strdup(const char *s1)
{
char *s2 = malloc(strlen(s1)+1);
if(s2 == NULL)
{
return NULL;
}
strcpy(s2, s1);
return s2;
}
*s2
保证有足够的空间来存储*s1
,并且 using 使strcpy()
我们不必将strlen()
结果存储在另一个函数中,以便以后用作strncpy()
. 然而有些人用strncpy()
,甚至编写这个函数memcpy()
,它们都需要一个长度参数。我想知道人们对此有何看法。如果您认为strcpy()
在某些情况下是安全的,请说出来。如果您有充分的理由不在strcpy()
这种情况下使用,请给出 - 我想知道为什么在这种情况下使用它可能会strncpy()
更好memcpy()
。如果您认为strcpy()
还可以,但不在这里,请解释。
基本上,我只是想知道为什么有些人memcpy()
在其他人使用而其他人使用时strcpy()
使用 plain strncpy()
。是否有任何逻辑比三个更喜欢一个(忽略前两个的缓冲区检查)?