gpt4 book ai didi

c - 将字符串转换为二维数组时,第一个元素被损坏

转载 作者:行者123 更新时间:2023-11-30 19:28:12 24 4
gpt4 key购买 nike

将给定字符串转换为二维数组时,每次我尝试返回时,数组的第一个元素都会更改为随机字符串。

这是代码。我已经 GDBed 并尝试使用无键字符串,但它仍然失败。 count_letterscount_words 只是循环遍历给定的指针,直到找到一个键或分别计算所有键。

char **str_to_dp(char const *str, char const key)
{
char **arr = malloc(sizeof(*arr) * (count_words(str, key) + 1));
int i = 0;

if (!arr)
perror("get_PATH");
for (int j = 0, word = 0; str[j]; j++, i++, word = 0) {
while (str[j] == key)
j++;
arr[i] = malloc(count_letters(str + j, key) * sizeof(char));
if (!arr[i])
perror("get_PATH");
while (str[j] != key)
arr[i][word++] = str[j++];
}
arr[i] = 0;
return arr;
}

当在循环内打印 arr[i] 且 GDB 仍在循环内时,第一个元素保持正常。每当我尝试打印(例如,在返回之前使用循环)时,我都会得到第一行的随机值(有时是第二行,如果字符串有足够的元素)。知道为什么吗?

感谢您的阅读。

最佳答案

尝试在 gdb 中单步执行。基本问题是,每当到达 for 循环底部时,str[j] == key 将为 true。除非 key 是 '\0' ,否则测试 str[j] 将始终成功,并且您的 for 循环将离开数组末尾。

您需要计算 for 循环中的单词数,而不是运行到 str[j] == 0 或更改 for 末尾的 while 循环循环以 while (str[j] != key && str[j]) 作为测试。

关于c - 将字符串转换为二维数组时,第一个元素被损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54452151/

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