C语言 将字符串转换为 2d 数组时,第一个元素会损坏



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

这是代码。我已经GDB并尝试使用无键字符串,但仍然失败。 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都是真的。 除非'' key,否则测试str[j]将始终成功,并且您的 for 循环将离开数组的末尾。

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

除了@dgnuff所说的之外,似乎我的问题不在函数之外。我已将(char **)数组转换为(char const *)而不是(char const **)

相关内容

  • 没有找到相关文章

最新更新