C - 将令牌拆分为多个令牌数组

时间:2015-11-11 17:43:37

标签: c arrays pointers token

我花了很多时间思考这个问题,但尚未找到答案。我有一些解决方案,但它们都会产生内存泄漏......

我有这些功能:

char *read_line(void)
{
  char *line = NULL;
  size_t bufsize = 0; 
  getline(&line, &bufsize, stdin);
  return line;

}

#define BUFSIZE 64
#define DELIM " \t\r\n\a" 
char **split_line(char *line)
{
  int bufsize = BUFSIZE;
  int position = 0;
  char **argumentlist = malloc(bufsize * sizeof(char*));
  char *argument;

  if (!argumentlist) {
    fprintf(stderr, "allocation error\n");
    exit(EXIT_FAILURE);
  }

  argument = strtok(line, DELIM);
  while (argument != NULL) 
  {
    argumentlist[position] = argument;
    position++;

    if (position >= bufsize) 
    {
      bufsize += SP_BUFSIZE;
      argumentlist = realloc(argumentlist, bufsize * sizeof(char*));
      if (!argumentlist) 
      {
        fprintf(stderr, "allocation error\n");
        exit(EXIT_FAILURE);
      }
    }

    argument = strtok(NULL, DELIM);
  }

  argumentlist[position] = NULL; //null terminates list of arguments

  return argumentlist; //array of arguments
}

所以我现在有一个包含令牌的数组。现在的问题是我想将这个令牌数组拆分成更小的数组,以便使用shell命令。例如,如果有人输入:" ls -l |排序"我需要两个数组;一个带有令牌:" ls -l NULL"另一个用"排序NULL" ==>

token1[0] = ls
token1[1] = -l
token1[2] = NULL

token2[0] = sort
token2[1] = NULL

我需要execvp命令的这些数组。或者如果有人输入:" ls -l< test.txt> hello.txt的"我应该使用令牌获得两个数组:" ls -l NULL"和" test.txt hello.txt NULL"。所以我想创建一个函数,它接受一个char **并通过查找">"来创建令牌数组。 "<"或" |"作为界定。

我希望这是不可思议的,我真的有点卡住我不知道如何继续前进而不会产生内存泄漏。

0 个答案:

没有答案