gpt4 book ai didi

c - 获取 char 数组的所有行和段错误

转载 作者:行者123 更新时间:2023-11-30 15:29:37 25 4
gpt4 key购买 nike

我试图将文件的所有行放入 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;
}

最佳答案

应该是:

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

它分配一个指向您的行的指针数组。

当您实际上拥有一个 char* 字符串时,谈论一个文件会让人感到困惑。

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

此外,return NULL; 会导致内存泄漏。将该检查放在 arraymalloc() 之上。

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

关于c - 获取 char 数组的所有行和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com