簡體   English   中英

獲取char數組和segfault的所有行

[英]Get all the lines of a char array and segfault

我試圖將文件的所有行都放在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;
}

應該:

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

它為行分配了一個指針數組。

當您實際上有一個char*字符串時,談論一個file會令人困惑。

然后, while(c)循環不會結束,因為您沒有在其中更新c 我把這個留給你去解決。

此外,您還會發生內存泄漏,並return NULL; 將該檢查放在arraymalloc()上方。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM