回答
memmem,不幸的是它是GNU特有的,而不是标准C.但是,它是开源的,所以你可以复制代码(如果许可证适合你)。
没有在standard library(这不是那么大,所以看看)。但是编写自己的代码很简单,可以直接逐字节地使用,或者使用memchr(),然后迭代地使用memcmp()。
+1,我喜欢使用memchr和memcpy的想法。您可以逐字逐句执行strstr实现,并将其所有str函数替换为其mem对应项。 – quinmars 2010-01-02 21:55:17
strstr的良好实现根本不是微不足道的 - 它们使用复杂的算法工作得多,速度比平凡的算法快得多。例如,下面是GNU libc中实现的核心:http://bazaar.launchpad.net/~vcs-imports/glibc/master/view/head:/string/str-twoway.h – 2015-09-09 21:22:49
@GregPrice:I我不建议标准库'strstr()'必然是微不足道的;简单地说,即使通常最优解决方案不那么简单,OP所需的功能也可以被轻易实现。标准库实现必须高度优化,因为它们的应用程序未预先知道。在编写特定于应用程序的代码时,只需要快速(或小)足以满足应用程序的需求。在这种特定情况下,类似于您的示例的实现可能是没有根据的。 – Clifford 2015-09-10 09:25:02
在标准库中,没有。然而,快速谷歌搜索“安全C字符串库”出现了几个潜在有用的结果。在不了解更多关于您尝试执行的任务的情况下,我无法推荐任何特定的第三方实施。
如果这是唯一的“安全”的功能,你需要超出标准的功能,那么它可能是最好的推出自己的,而不是花费集成第三方库的努力,只要你有信心,你可以这样做不会引入其他错误。
我在问题中看不到“安全”一词。 – 2010-01-02 18:11:35
你是对的,我对这个问题的解释略有不同。广泛阅读“可能包含空值”可能导致相信它也可能不包含空值。由于缺乏空终止是导致人们考虑'strncpy()'(实际上是'strlcpy()')的一个主要问题,所以从这个方向回答我的答案似乎是适当的,因为其他答案已经涵盖了其他方法。我试图说明这一点:“不知道更多关于任务的信息......我不推荐任何特定的第三方实施。”也许我可以更清楚。 – Adam 2010-01-02 18:36:28
- 1. strstr:使用不同版本的gcc的行为不同
- 2. 在C中读“纯”字节
- 3. 用于使用旧版本php的strstr替代方案
- 4. DOMPDF:0字节和文本/纯Mime类型的文件
- 5. 的strstr在C
- 6. GitHub上 - 浏览降价文件的纯文本版本
- 7. 如何创建HTML电子邮件的纯文本版本?
- 8. 如何查看纯文本和电子邮件的html版本?
- 9. 节点版本不升级
- 10. nodester节点版本错误
- 11. 不支持节点版本?
- 12. 执行strstr
- 13. strstr()in emacs lisp?
- 14. 如何恢复jackrabbit 2.1版本库中的“版本化节点”?
- 15. 如何恢复jackrabbit 2.1版本库中的“版本化节点”?
- 16. 节点版本冲突|安装了两个不同的版本
- 17. pyenv修改我的提示文字的版本,但不是纯粹编号者
- 18. Android的 - 错误字节码转换与最小的SDK版本
- 19. strstr php或替代部分字符串
- 20. “纯文本”字段的WorkItem验证
- 21. 使用非表情符号版本的Unicode字符(高位图和纯html)
- 22. HTML:交换文本框为纯文本,但保持版式
- 23. Java字节码是否与不同版本的Java兼容?
- 24. 的valgrind的strstr错误
- 25. 搜索与一的strstr字符串中的字符*
- 26. 节点js,设置路由的版本
- 27. 如何找到旧版本的节点?
- 28. 加载节点的前一版本
- 29. 跨所有节点的Hadoop版本
- 30. 执行strstr()函数
更好的是你可以编写一个新的c程序来拥有这样的功能。 我不认为这会是一件复杂的事情。 – Vijay 2010-01-02 18:10:05