Учитывая, что нет библиотеки, обеспечивающей эту функцию (AFAIK), вы можете написать ее самостоятельно.Я уверен, что это может быть оптимизировано, но очень простое определение, использующее GNU C11 для этого, которое я использую:
#pragma once /* libalx/base/string/strcpy/strscpy.h */
#include <stddef.h>
__attribute__((nonnull))
ptrdiff_t strscpy (char dest[restrict /*size*/],
const char src[restrict /*size*/],
ptrdiff_t size);
#include "libalx/base/string/strcpy/strscpy.h"
#include <errno.h>
#include <stddef.h>
#include <string.h>
ptrdiff_t strscpy (char dest[restrict /*size*/],
const char src[restrict /*size*/],
ptrdiff_t size)
{
ptrdiff_t len;
if (size <= 0)
return -E2BIG;
len = strnlen(src, size - 1);
memcpy(dest, src, len);
dest[len] = '\0';
return len;
}
Примечание: я предпочитаю ptrdiff_t
для размеров массива,но вы можете использовать size_t
/ ssize_t
, как и версия для Linux.