gpt4 book ai didi

c - Regexc - 段错误

转载 作者:行者123 更新时间:2023-11-30 15:10:06 26 4
gpt4 key购买 nike

我对 C 比较陌生,并且遇到以下问题:

 regex_t re;
regmatch_t matches[2];
int start;
int end;
int count = 0;

int reti = regcomp(&re, "^(?:[a-zA-Z]|[a-zA-Z](?:[a-zA-Z0-9\\-])*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z]|[a-zA-Z](?:[a-zA-Z0-9\\-])*[a-zA-Z0-9]))*$", REG_EXTENDED);

while (1) {

printf("Local = %s\n", local);
reti = regexec(&re, local, 2, matches, 0);

// More code here

}

当我运行此程序时,出现段错误

local 被定义为 char *local 并且正在正确打印。

我使用GDB运行代码,结果发现问题出现在以下行:

reti = regexec(&re, local, 2, matches, 0);

我似乎无法弄清楚为什么。

这是 gdb 的输出:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7af8d42 in regexec () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) backtrace
#0 0x00007ffff7af8d42 in regexec () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x000000000040092d in email_in (str=0x400aa8 "giri@gmail.com") attestdriver.c:70
#2 0x0000000000400780 in main () at testdriver.c:15

有人对可能出现的问题有任何想法吗?

感谢您的帮助。

最佳答案

问题其实就在这里:

int reti = regcomp(&re, "^(?:[a............

来自here:

You need to check the return of regcomp, it will tell you that your regex is invalid.

You will get Invalid preceding regular expression

(?: 不受 POSIX 正则表达式支持。

<小时/>

抛出此错误是因为:

A common way to get a segfault is to dereference a null pointer

(来自 here )

正则表达式无法初始化,因为非法 (?:

原始错误显示在 regcomp 的返回中,并且不会停止执行。

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

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