【发布时间】:2022-09-23 00:17:48
【问题描述】:
我在 C 中使用 pcre2_substitute。
PCRE2_SPTR pattern;
PCRE2_SPTR replacement;
PCRE2_SPTR subject;
pcre2_code *re;
int errornumber;
int i;
int rc;
PCRE2_SIZE erroroffset;
PCRE2_SIZE *ovector;
size_t subject_length;
size_t replacement_length = strlen((char *)replacement);
pcre2_match_data *match_data;
subject_length = strlen((char *)subject);
PCRE2_UCHAR output[1024] = \"\";
PCRE2_SIZE outlen = sizeof(output) / sizeof(PCRE2_UCHAR);
re = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, PCRE2_DOTALL, &errornumber, &erroroffset, NULL);
if (re == NULL)
{
PCRE2_UCHAR buffer[256];
pcre2_get_error_message(errornumber, buffer, sizeof(buffer));
printf(\"PCRE2 compilation failed at offset %d: %s\\n\", (int)erroroffset, buffer);
}
match_data = pcre2_match_data_create_from_pattern(re, NULL);
rc = pcre2_substitute(re, subject, subject_length, 0,
PCRE2_SUBSTITUTE_GLOBAL | PCRE2_SUBSTITUTE_EXTENDED,
match_data, NULL, replacement, replacement_length, output, &outlen);
输出字符串由
PCRE2_UCHAR output[1024] = \"\";
如果字符串长度超过 1024 个字符,pcre2_substitute 将返回 -48 错误。
在替换之前,我们不知道输出所需的长度。
你如何定义一个足够大的output 字符串?