我必须解析一个文件,该文件有几个由空行分隔的条目。每个条目具有以下格式:
ab bababa
2
ab bba
b ba
在哪里:
- 第一行:将有两个单词用空格分隔。
- 第二行:将有一个整数,表示需要考虑多少行
- 下一行:将有每个两个单词,用空格分隔。
在每个条目的末尾,我需要调用一个函数并传递条目中的一些参数。具体来说,我需要传递在第一行中找到的前两个单词和一个数组,该数组将包含表示整数之后的行的结构。结构定义如下所示:
typedef struct t_transformation_rule {
char *needle;
char *replacement;
} transformation_rule;
正如我所说,一个文件可以有多个条目。因此,特定文件可能如下所示:
ab bababa
2
ab bba
b ba
a abba
3
a bb
bb abba
a abba
abcd abcd
0
abab bbbaaa
2
ab aaa
ab bbb
这是我为解析它所做的,但我遇到了麻烦,因为当我找到数字时,我初始化了一个结构数组,然后我尝试使用该数组并存储下一行,但该变量是超出范围。这是代码:
void processFile(char *file_name)
{
char buff[120];
char needle[20], replacement[20];
char origin[20], target[20];
int num, rule_counter;
size_t len;
int context,rc;
transformation_rule *rules_list;
context =0;
rule_counter = 0;
FILE *in = fopen(file_name,"r");
if (in != NULL) {
while(fgets (buff, sizeof buff, in)) {
len = strlen (buff);
while (len && buff[len-1] == '\n') {
buff[--len] = 0;
}
if (context == 0) {
rc = sscanf(buff, "%s %s", origin, target);
context = 1;
}
if (context == 1) {
rc = sscanf(buff, "%d", &num);
transformation_rule rules_list[num];
context = 2;
}
if (context == 2) {
if (!len) {
context = 0;
continue;
}
rc = sscanf(buff, "%s %s", needle, replacement);
transformation_rule *rule = malloc(sizeof(transformation_rule));
rule->needle = needle;
rule->replacement = replacement;
// HERE I GET THE ERROR SAYING THAT RULES_LIST IS NOT DEFINED
rules_list[rule_counter] = rule;
rule_counter++;
}
}
}
}
如果你们能告诉我我做错了什么,或者我怎么能更容易做到这一点,我将不胜感激。