首页 > 解决方案 > 有没有办法测试 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_ts 可以安全释放?

标签: cregex

解决方案


不,我不这么认为,除非某个特定的系统提供了一些特别的东西。就POSIX而言,它对regex_t用户来说是不透明的,regex_t除了regcomp, regexec, regerror,之外没有任何标准函数处理regfree。此外,根据 POSIX,如果regcomp失败,则 的内容preg是未定义的。

所以你必须自己跟踪它。


推荐阅读