我正在尝试从文件中获取令牌并将其放入数组中。然而,它一直在失败。我想要的标记只是字母数字和数字。其他一切都是分隔符。
代码:
void readFile(WORDS list, char *filepath)
{
int i = 0, j = 0, ch;
char *token, *temp;
FILE *file = fopen(filepath, "r");
if(file)
{
fseek(file, 0, SEEK_END);
long f_size = ftell(file);
fseek(file, 0, SEEK_SET);
token = malloc(f_size);
temp = malloc(f_size);
while((ch = fgetc(file)) != EOF)
{
temp[i++] = (char) ch;
if(regeval(temp, "^[0-9][0-9]*$"))
token[j++] = (char) ch;
else if(regeval(temp, "^[a-zA-Z][a-zA-Z0-9]*$"))
token[j++] = (char) ch;
else
{
token[j] = '\0';
memset(token, 0, sizeof(f_size));
memset(temp, 0, sizeof(f_size));
i = j = 0;
}
}
}
fclose(file);
}
int regeval(char *str, char *exp)
{
// Make regex object
regex_t regex;
// Compile and execute expression
int reg = regcomp(®ex, exp, REG_EXTENDED);
reg = regexec(®ex, str, 0, NULL, 0);
// Expression matches token
if(!reg)
return 1;
return 0;
}
如果我有一个名为test.txt的文件,其中包含内容:Abacus
,则只打印出Abac
。我究竟做错了什么?我认为这是一个nullbyte问题,所以我添加了该行,但没有任何改变。
更新:更新了代码。但是,它会打印出Segmentation fault。