gpt4 book ai didi

c - 从c中的函数获取二维字符数组

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

我想用空格分割我的字符串,这是我的代码。(引用其他人)

void main() {
char origin_str[] = "How are you";
int n_segs = Words_counts(origin_str);
char **split_array = malloc(n_segs * sizeof(char*));
split_array = split_str_to_array(origin_str);
..... //do something
free(split_array);
}

和 split_str_to_array 函数:

char **split_str_to_array(const char strr[]) {
char **res = NULL;
char * p = strtok(strr, " ");
int n_spaces = 0;

while (p) {
res = realloc(res, sizeof(char*) * ++n_spaces);
if (res == NULL)
exit(-1);

res[n_spaces - 1] = p;
p = strtok(NULL, " ");
}
res = realloc(res, sizeof(char*) * (n_spaces + 1));
res[n_spaces] = 0;
return res;
}

它工作得很好,但我对从 split_str_to_array 函数获取 char 数组的用法感到困惑。

我应该在 split 函数中使用 free(res) 吗?如果是,如何返回 char 数组?声明一个已知长度的新返回值?

我担心 split 函数中的内存使用问题。或者,有更好的方法来做同样的事情吗?

非常感谢您的帮助。

最佳答案

free() 的用法是正确的。

如果不再需要,可以通过将分配函数返回的内容传递给 free() 来释放分配的内容。

但是main()中的分配是没有用的

char **split_array = malloc(n_segs * sizeof(char*));

如下一行

split_array = split_str_to_array(origin_str);

您覆盖了分配给split_array的内容。

这样做会丢失 malloc() 返回的内容,因此您无法再释放它,从而导致内存泄漏。

关于c - 从c中的函数获取二维字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27978970/

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