一尘不染

Mac OS X和Linux中的安全字符串函数

linux

Mac OSX和Linux中是否有与Windows中相同的安全字符串函数(如strcpy_s,strncpy_s..etc)?

在多字节和宽字符之间转换的函数呢?


阅读 259

收藏
2020-06-07

共1个答案

一尘不染

有两种安全的字符串操作策略。Linux /
glibc维护者拒绝添加安全的功能,理由是您应该掌握字符串的长度并加以使用memcpy

另一方面,Mac
OSX包含strlcpystrlcat来自BSD。snprintfasprintf可以在两个平台上使用,效果几乎相同:

size_t strlcpy(char *d, char const *s, size_t n)
{
    return snprintf(d, n, "%s", s);
}

size_t strlcat(char *d, char const *s, size_t n)
{
    return snprintf(d, n, "%s%s", d, s);
}

您也可以考虑使用此处找到的BSD实现。如果您的代码将在多个平台上编译,则可以使用预定义的库宏测试是否存在glibc

#if defined __GNU_LIBRARY__ || defined __GLIBC__

    size_t strlcpy(char *, char const *, size_t);
    size_t strlcat(char *, char const *, size_t);

#endif

使用iconv界面最容易处理字符编码之间的转换。

2020-06-07