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

Orc*_*rca 23 c++ linux windows security macos

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

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

Fre*_*Foo 11

安全字符串操作有两种策略.Linux/glibc维护者拒绝添加安全功能,认为你应该保留字符串的长度并使用memcpy.

另一方面,Mac OSX包括BSD strlcpystrlcat来自BSD.snprintf并且asprintf可以在两个平台上使用相同的效果:

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);
}
Run Code Online (Sandbox Code Playgroud)

您还可以考虑使用此处的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 
Run Code Online (Sandbox Code Playgroud)

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