【问题标题】:Get all the lines of a char array and segfault获取 char 数组的所有行和段错误
【发布时间】:2014-10-02 10:19:33
【问题描述】:

我正在尝试将文件的所有行放入 char ** 中。 我的功能很简单: 唯一的参数是指向包含文件的 char 数组的指针。 我首先计算分配我的 char ** 的行数。 分配后,我使用 strtok_r 解析文件。然后是段错误。 我想知道这种方式是否可以做到这一点?

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;
}

【问题讨论】:

  • 这个问题应该被关闭,因为 OP 不断改变问题,它不再有意义。

标签: c segmentation-fault strtok


【解决方案1】:

应该是:

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

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

当你实际上有一个 char* 字符串时,谈论 file 会让人困惑。

然后您的while(c) 循环不会结束,因为您没有更新其中的c。我把这个留给你解决。

另外,return NULL; 存在内存泄漏。将该支票放在arraymalloc() 上方。

确定需要strtok() 的可重入版本?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2017-03-02
    • 2017-12-05
    • 2014-01-05
    • 1970-01-01
    • 2012-09-15
    • 2012-03-25
    相关资源
    最近更新 更多