gpt4 book ai didi

c - 访问动态二维数组元素的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:50 25 4
gpt4 key购买 nike

我的目标是创建一个函数,将字符串转换为由定界符拆分初始字符串产生的“单词”数组。所有的单词都应该以 null 结尾。例如:strtoarr("**hello***world*", "*") 应该导致 {"hello", "world"}。这是我的函数。

char    **strtoarr(char const *s, char c)
{
char **arr;
size_t i;
size_t j;
size_t k;

arr = malloc(sizeof(**arr) * (strlen(s) + 2));
if (arr == 0)
return (NULL);
i = 0;
k = 0;
while (s[i] != '\0')
{
j = 0;
while (s[i] != c)
{
arr[k][j] = s[i];
if (s[i + 1] == c || s[i + 1] == '\0')
{
j++;
arr[k][j] = '\0';
k++;
}
i++;
j++;
}
j = 0;
while (s[i] == c)
i++;
}
arr[k] = 0;
return (arr);
}

它只适用于空字符串和段错误。我相信问题就在这里。

arr[k][j] = s[i];

但是我不明白问题是什么。提前致谢

最佳答案

您的代码有很多问题,但最重要的是动态分配。您的代码没有分配内存来保存字符串数组(又名 char 数组)。

这一行:

arr = malloc(sizeof(**arr) * (strlen(s) + 2));

分配内存以保存数字字符(即 strlen(s) + 2 字符),但这不是您想要的。尤其是当 arr 是指向 char 的指针时。

您可以使用的一种简单方法是分配一个 char 指针数组,然后为每个指针分配一个 char 数组。

这将是:

char** arr = malloc(sizeof(*arr) * NUMBER_OF_WORDS_IN_INPUT);

arr[0] = malloc(NUMBER_OF_CHARACTERS_IN_WORD0 + 1);
arr[1] = malloc(NUMBER_OF_CHARACTERS_IN_WORD1 + 1);
...
arr[NUMBER_OF_WORDS_IN_INPUT - 1] = malloc(NUMBER_OF_CHARACTERS_IN_LAST_WORD + 1);

然后你可以使用语法将字符存储到arr

arr[i][j] = SOME_CHARACTER;

没有段错误。 (当然需要 ij 在分配范围内)。

关于c - 访问动态二维数组元素的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55136040/

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