gpt4 book ai didi

c++ - 是否可以从 C printf() 捕获错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:40 26 4
gpt4 key购买 nike

我有一个 C++ 程序,经过验证的 API 用户(不是交互式用户,因此这里没有主要的安全/完整性暴露)可以传递一个参数,该参数成为 printf() 的格式字符串(实际上是 vsnprintf()) .当然,错误的格式说明符会使程序崩溃。我已经记录了这一点并且它是可以接受的——但是有什么方法可以捕获 printf() 错误而不是让 C 运行时断言吗?

环境几乎是标准的 Posix(z/OS XLC、FWIW)。

最佳答案

使用sigsetjmp()/siglongjmp()

在使用可能错误的格式之前调用 sigsetjmp(),并为 SIGSEGV 和 SIGBUS 安装自定义处理程序,该处理程序使用 的上下文调用 siglongjmp() >sigsetjmp() 调用。

请务必在不需要信号处理程序后使用它们,以免其他地方的 SIGSEGV 导致一些意外结果。

这里的例子:

http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/apis/sigsetj.htm

关于c++ - 是否可以从 C printf() 捕获错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29769541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com