我试图将文件的所有行放在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;
}
答案 0 :(得分:1)
应该是:
char **array = malloc(sizeof(char*) * nblines);
为你的行分配一个指针数组。
当您实际拥有file
字符串时,谈论char*
时会感到很困惑。
然后,您的while(c)
循环未结束,因为您未在其中更新c
。我把它留给你修理。
此外,您有return NULL;
的内存泄漏。将该检查置于array
' s malloc()
上方。
您确实需要可重复版strtok()
?