获取char数组和segfault的所有行

时间:2014-10-02 10:19:34

标签: c segmentation-fault strtok

我试图将文件的所有行放在char **中。 我的功能很简单: 唯一的参数是指向char数组的指针,该数组包含文件。 我首先计算分配我的char **的行数。 一旦分配,我使用strtok_r来解析文件。然后是Segfault。 我想知道是否可以这样做?

char **getlines(char *file)
{
  int i = 0;
  int nblines = 0;
  while (file[i] != '\0')
  {
    if (file[i] == '\n')
      nblines++;
    i++;
  }
  char **array = malloc(sizeof(char*) * nblines);
  char *saveptr;
  if (nblines == 0)
    return NULL;
  int a = 0;
  char *c = strtok_r(file, "\n", &saveptr);
  while (c)
  {
    array[a] = strtok_r(NULL, "\n", &saveptr);
    a++;
  }
  return array;
}

1 个答案:

答案 0 :(得分:1)

应该是:

char **array = malloc(sizeof(char*) * nblines);

为你的行分配一个指针数组。

当您实际拥有file字符串时,谈论char*时会感到很困惑。

然后,您的while(c)循环未结束,因为您未在其中更新c。我把它留给你修理。

此外,您有return NULL;的内存泄漏。将该检查置于array' s malloc()上方。

您确实需要可重复版strtok()