是否有一个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
是可以安全释放的?
答案 0 :(得分:1)
不,我不这么认为,除非某些特定的系统提供了一些特殊的东西。就POSIX而言,regex_t
对于用户而言是不透明的,除regex_t
,{{1之外,没有其他处理regcomp
的标准函数。 }},regexec
,regerror
。另外,根据POSIX,如果regfree
失败,则regcomp
的内容未定义。
因此,您必须自己对其进行跟踪。