鉴于没有任何库提供此功能(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
数组大小,但您可以像 linux 版本一样使用size_t
/ 。ssize_t