有没有一种方法可以测试regex_t实例是否已成功编译?

时间:2020-05-14 01:19:11

标签: c regex

是否有一个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是可以安全释放的?

1 个答案:

答案 0 :(得分:1)

不,我不这么认为,除非某些特定的系统提供了一些特殊的东西。就POSIX而言,regex_t对于用户而言是不透明的,除regex_t,{{1之外,没有其他处理regcomp的标准函数。 }},regexecregerror。另外,根据POSIX,如果regfree失败,则regcomp的内容未定义。

因此,您必须自己对其进行跟踪。