замена strncpy в gcc 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).

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

Другие решения

Вы могли бы использовать snprintf(dest, size, "%s", source);

Обратите внимание, что source должен быть \0-определено для snprintf, даже если дольше, чем size,

0

По вопросам рекламы [email protected]