当前位置: 首页 > 面试题库 >

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

闾丘鸣
2023-03-14
问题内容

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

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


问题答案:

有两种安全的字符串操作策略。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界面最容易处理字符编码之间的转换。



 类似资料:
  • 问题内容: 我正在尝试从字符串中读取一些BigDecimal值。假设我有以下字符串:“ 1,000,000,000.999999999999999”,我想从中获取BigDecimal。怎么做呢? 首先,我不喜欢使用字符串替换(替换逗号等)的解决方案。我认为应该有一些精巧的格式化程序为我完成这项工作。 我发现了DecimalFormatter类,但是它通过两次操作-损失了大量精度。 那么,我该怎么办

  • 我已经在练习26中,构建devpkg的时候介绍了Better String库。这个练习让你从现在开始熟悉bstring库,并且明白C风格字符串为什么十分糟糕。之后你需要修改liblcthw的代码来使用bstring。 为什么C风格字符串十分糟糕 当人们谈论C的问题时,“字符串”的概念永远是首要缺陷之一。你已经用过它们,并且我也谈论过它们的种种缺陷,但是对为什么C字符串拥有缺陷,以及为什么一直是这样

  • 本文向大家介绍SQL中的字符串函数,包括了SQL中的字符串函数的使用技巧和注意事项,需要的朋友参考一下 SQL中的字符串函数都用于操作字符串值。SQL指定了许多字符串函数。其中一些领域如下: ASCII码(str) 此函数返回提供的字符串str中第一个单词的ASCII或数字值。如果为空字符串,则返回0。 例 这将返回S的ASCII值,即83,因为它是字符串中的第一个字符。 BIN(n) 这里n是二

  • 问题内容: 我通过通过PHP回显将XML文档发送给AJAX调用来进行响应。为了形成这个XML文档,我遍历了数据库的记录。问题在于数据库中包含带有’<’符号的记录。因此,浏览器自然会在该特定位置引发错误。如何解决? 问题答案: 通过使用(或可能更适当地)使用库来构建XML文档(例如DOMDocument或XMLWriter)来转义这些字符。 另一种替代方法是使用CDATA节,但是您必须注意是否出现。

  • 问题内容: 如果我使用fopen()调用来在多线程中打开同一文件,然后将数据写入该文件。我是否应该使用互斥锁来确保数据不会混乱? 问题答案: 如果两个线程都使用来打开同一文件,则它们各自将具有独立的文件流(),并由引用同一文件的独立文件描述符支持。您可以独立地写入两个文件流,但是文件的最终结果将取决于线程在何处写入以及何时刷新文件流。除非您控制每个线程的写入位置,否则结果是不可预测的。最简单的事情

  • 问题内容: 为了使gettimeofday能够正常工作,当前时间必须全局存储,但是我不确定该函数是否修改了任何全局状态,从而并发执行未定义。 问题答案: gettimeofday是线程安全的。 这里列出的(posix)函数可能不是,gettimeofday不是其中之一。