Есть ли 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).
Вы должны написать свои собственные
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);
Обратите внимание, что source
должен быть \0
-определено для snprintf, даже если дольше, чем size
,