2

在 arm 中没有strncpy()适当的等效项,它将同时使用目标大小和要复制的源字符数,

strlcpy(char * /*dst*/, const char * /*src*/, size_t /*len*/);

所以在这里我们只需要使用strlcpy()并希望源字符串为空终止吗?

MS提供了一个完美的(至少看起来是;)):

StringCchCopyN(LPTSTR pszDest, size_t cchDest, LPCTSTR pszSrc, size_t cchSrc);

对于外行来说,strncpy()是不安全的(为什么 strncpy 是不安全的] 1)。

4

2 回答 2

0

你需要自己写

char *mystrncpy(char *dest, const char *src, size_t nbytes)
{
    char *svd = dest;

    if(nbytes)
    {
        dest[--nbytes] = 0;
        while(*src && nbytes-- )
             *dest++ = *src++;
    }
    return svd;
}

或者

char *mystrncpy(char *dest, const char *src, size_t destsize, size_t srcsize)
{
    memcpy(dest, src, destsize < srcsize ? destsize : srcsize);
    dest[destsize -1] = 0;
    return dest;
}
于 2017-08-29T08:42:30.753 回答
0

你可以使用snprintf(dest, size, "%s", source);

请注意,对于 snprintf,source确实需要\0终止,即使长于size.

于 2018-08-11T07:26:02.040 回答