gcc臂中strncpy的替换



strncpy()在arm中是否没有适当的等效项,这将占用要复制的目标大小和源字符数,

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

所以这里我们只能使用strlcpy(),并希望源字符串以null结尾?

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

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

对于不熟悉的人来说,strncpy()是不安全的(为什么strncpy不安全(。

您需要编写自己的

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;
}

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

请注意,对于snprintf,source确实需要终止,即使比size长。

最新更新