Mac OSX和Linux中是否有与Windows中相同的安全字符串函数(如strcpy_s,strncpy_s..etc)?
在多字节和宽字符之间转换的函数呢?
有两种安全的字符串操作策略。Linux / glibc维护者拒绝添加安全的功能,理由是您应该掌握字符串的长度并加以使用memcpy。
memcpy
另一方面,Mac OSX包含strlcpy和strlcat来自BSD。snprintf并asprintf可以在两个平台上使用,效果几乎相同:
strlcpy
strlcat
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); }
您也可以考虑使用此处找到的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界面最容易处理字符编码之间的转换。
iconv