c - 有没有办法测试 regex_t 实例是否成功编译?
问题描述
是否有用于regex_t
显示它是否已成功编译的实例的吸气剂?或者是跟踪返回值的唯一方法regcomp()
?
例如在以下代码中:
#include <stdio.h>
#include <regex.h>
static const char* str[] = { "foo", "bar" };
int main()
{
regex_t r[(sizeof str)/(sizeof *str)];
size_t i = 0;
for ( ; i < (sizeof r)/(sizeof *r); ++i ) { regcomp( &r[i], str[i], 0 ); }
for ( i = 0; i < (sizeof r)/(sizeof *r); ++i ) { regfree( &r[i] ); }
return 0;
}
regfree()
调用失败regex_t
的实例是否安全?regcomp()
如果没有,我是否可以测试一个regex_t
实例是否已成功编译,或者我是否需要跟踪所有regcomp()
返回值以了解哪些regex_t
s 可以安全释放?
解决方案
不,我不这么认为,除非某个特定的系统提供了一些特别的东西。就POSIX而言,它对regex_t
用户来说是不透明的,regex_t
除了regcomp
, regexec
, regerror
,之外没有任何标准函数处理regfree
。此外,根据 POSIX,如果regcomp
失败,则 的内容preg
是未定义的。
所以你必须自己跟踪它。
推荐阅读
- reactjs - MUI React 中的月份和年份选择器
- php - WooCommerce:按国家/地区代码获取运输方式
- mysql - 如何在 mysql InnoDB 中使用大 OFFSET 优化查询?
- matlab - 具有动态变化图标的显示类 Simulink 模块
- c++ - 在 C++ 中将 float / double 转换为其 IEEE754 表示
- database - 两个微服务数据库之间如何通信?
- ios - 无法在 Android Studio 中添加苹果设备
- angular - 创建了多少角度组件的对象
- databricks - 数据块;表 ACL;无法更改表所有权
- python - Altair:如何更改折线图中线条的颜色?