gpt4 book ai didi

C regexec 段错误

转载 作者:行者123 更新时间:2023-11-30 19:24:16 25 4
gpt4 key购买 nike

这是我第一次真正尝试使用 C 和正则表达式,所以请耐心等待...我有一个模式数组 (shortener_patterns),其中我将其连同要编译的计数和数组一起传递给 compile_patterns模式(shortener_r_patterns)。我能够编译这些模式,但代码在 regexec 上会出现段错误。我猜想这与我引用 shortener_r_patterns 的方式以及我缺乏完全理解指针有关。或者也许它们一开始就没有正确编译。有人能让我朝着正确的方向前进吗?

char **shortener_patterns = '\0';

regex_t **shortener_r_patterns;

int *shortener_count = 0;


int compile_patterns(char **patterns, regex_t **r_patterns, int *count, int *compiled_count) {
static int i;

if (!(r_patterns = calloc(count, sizeof(regex_t)))) {
return -1;
}

for (i=0; i<count; i++) {
log(5, "compiling pattern %i: %s\n", i, patterns[i]);

if (regcomp(&(r_patterns[i]), patterns[i], REG_EXTENDED|REG_NEWLINE|REG_ICASE|REG_NOSUB) != 0) {
log(1, "invalid pattern: %s\n", patterns[i]);
return -1;
}
// increment the compiled count
(*compiled_count)++;
}
log(3, "finished compiling %i\n", count);

return 0;
}

int check_shortener(char *domain) {
static int i;

if (!shortener_count) {
return 0;
}

for (i=0; i<shortener_count; i++) {
log(5, "checking shortner pattern '%s' against %s:%d\n", shortener_patterns[i], domain, i);
if (regexec(&(shortener_r_patterns[i]), domain, 0, 0, 0) == 0) {
log(1, "pattern %i '%s' found in %s\n", i, shortener_patterns[i], domain);
return 1;
}
}
return 0;
}

这里是我扫描文件以获取模式内容、添加到数组,然后最终编译模式数组的地方。

-- 剪断--

   while ((rc = fscanf(f, "%254[^\n]", buf)) > 0) {
if (buf[0] == '#') {
fscanf(f, "\n");
continue;
}
newshortener = realloc(shortener_patterns, sizeof(char *) *(count+1));
if (newshortener) {
shortener_patterns = newshortener;
}
else {
log(0, "could not realloc memory for shortener patterns\n");
fclose(f);
return -1;
}
shortener_patterns[count++] = strdup(buf);
fscanf(f, "\n");
}
fclose(f);
if (compile_patterns(shortener_patterns, shortener_r_patterns, count, &shortener_count) > 0) {
log(0, "Failed to compile %s patterns\n", sfile);
}

-- 剪断--

最佳答案

shortener_count 没有任何空格,您已将其定义为 int * 然后将指针设置为 0,然后访问该指针。

关于C regexec 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com