我希望这样做的原因是我想逐行读取文件,并检查每一行是否与正则表达式匹配。我正在使用getline()函数,它将行放入一个
那么我的问题是,我可以从
编辑:我被要求提供一个示例,在写这篇文章之前我没有考虑到这一点,对此我感到抱歉。我在阅读@chqrlie的答案后发现以下代码会导致分段错误。
char *
类型的变量中。我尝试使用regexec()
来检查正则表达式匹配,但该函数要求您提供要匹配的字符串作为const char *
。那么我的问题是,我可以从
char *
创建一个const char *
吗?或者也许有更好的方法来解决我试图解决的问题?编辑:我被要求提供一个示例,在写这篇文章之前我没有考虑到这一点,对此我感到抱歉。我在阅读@chqrlie的答案后发现以下代码会导致分段错误。
#define _GNU_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdbool.h>
#include <regex.h>
int main() {
FILE * file = fopen("myfile", "r");
char * line = NULL;
size_t len = 0;
ssize_t read;
regex_t regex;
const char * regexStr = "a+b*";
if (regcomp(®ex, regexStr, 0)) {
fprintf(stderr, "Could not compile regex \"%s\"\n", regexStr);
exit(1);
}
while ((read = getline(&line, &len, file)) != -1) {
int match = regexec(®ex, line, 0, NULL, 0);
if (match == 0) {
printf("%s matches\n", line);
}
}
fclose(file);
return 0;
}