Fre*_*Foo 11
安全字符串操作有两种策略.Linux/glibc维护者拒绝添加安全功能,认为你应该保留字符串的长度并使用memcpy.
另一方面,Mac OSX包括BSD strlcpy和strlcat来自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界面最容易处理字符编码之间的转换.
| 归档时间: |
|
| 查看次数: |
16642 次 |
| 最近记录: |