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
未定义。
因此,您必须自己对其进行跟踪。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句