有两种安全的字符串 *** 作策略。Linux /
glibc维护者拒绝添加安全的功能,理由是您应该掌握字符串的长度并加以使用
memcpy。
另一方面,Mac
OSX包含
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);}
您也可以考虑使用此处找到的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界面最容易处理字符编码之间的转换。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)