存储不同的数据字段并在C中链接它们

时间:2018-10-31 02:09:30

标签: c data-structures linked-list nodes

我目前所拥有的: 在一个单独的名为main.c的.c文件中,我有一个主要函数,如下所示:

int main(int argc, const char** argv){
  FILE* makefile = fopen("./testfile","r");
  size_t bufsize = 0;
  char* line = NULL;
  ssize_t linelen = getline(&line, &bufsize, makefile);
  while (linelen != -1){
    if(line[linelen-1] == '\n'){
      linelen -=1;
      line[linelen] = '\0';
    }
    if(line[0] != '\t'){
      storetgt(&line[0]);
    } else if (line[0] == '\t') {
      storerules(&line[0]);
    }
  }
}

此处,名为“ testfile”的文本文件如下所示:

A:
   echo A
B:
   echo B
c:
   echo C

,它将逐行进行解析,将测试文件的数据存储在第4行中。如果该行的第一个元素不是制表符,则main()将调用一个名为storetgt的函数,如果该行的第一个元素是制表符,则main()将调用一个名为storerules的函数(两者.c文件名为tgt.c,其中包含收集tgt名称和规则的框架。 我遇到的麻烦是tgt.c中的存储部分和链接部分;我的代码如下:

typedef struct tgt_st {
  char* name;
  string_list rules;
  struct tgt_st *next;
}tgt;

typedef struct string_list {
char* rules;
struct string_list* next;
}string_list;

tgt* createtgt(char* name, string_list rules, tgt* next){
  tgt* new_node = (tgt*)malloc(sizeof(tgt));
  new_node -> name = name;
  new_node -> rules = rules;
  new_node -> next = next;
  return new_node;
}

tgt* createrules(string_list rules, tgt* next){
  tgt* new_node = (tgt*)malloc(sizeof(target));
  new_node -> rules = rules;
  new_node -> next = next;
  return new_node;
} 
void storetgt(char* line){
  int argcp = 0;
  char** args = arg_parse(line,&argcp);
  if(strcmp(args[0], "a:") == 0){
    create(args[0],NULL,NULL);
  }else if(strcmp(args[0], "b:") == 0){
    create(args[0],NULL,NULL);
  }else if(strcmp(args[0], "c:") == 0){
    create(args[0],NULL,NULL);
  }
}
void storerules(char* line){
  int argcp;
  char** args = arg_parse(line,&argcp);
  if(line[0] == '\t'){
    storerules(&line[1]);
  } else {
    if(strcmp(args[0], "echo") == 0 && strcmp(args[1], "a") == 0){
      createrules(args, NULL);
    }else if(strcmp[0], "echo") == 0 && strcmp(args[1], "b") == 0){
      createrules(args, NULL);
    }else if(strcmp[0], "echo") == 0 && strcmp(args[1], "c") == 0){
      createrules(args, NULL);
    }
  }
}//ags is pointer to array of characters that holds arguments.

这似乎是在创建一堆包含不同tgt名称的分离节点,以及另一堆包含不同规则的分离节点。如何使持有[A:]的tgt节点指向包含[echo A]的节点,让持有[B:]的tgt节点指向包含[echo B]的节点,依此类推?

0 个答案:

没有答案