gpt4 book ai didi

c - C 中的递归不返回字符串值

转载 作者:行者123 更新时间:2023-11-30 17:46:16 27 4
gpt4 key购买 nike

我正在学习 C,为此我决定编写一个数独求解器。我无法让解决函数返回已解决的板,我的想法是问题出在递归函数调用上。

我将棋盘作为字符串传入,找到棋盘中第一个“0”的索引,并使用该索引构建该位置的可能值列表。然后,我迭代可能性,复制原始板,并用可能性替换零,然后将新板递归地传递给求解函数。代码如下:

char *solve(char *board)
{
int zero = strcspn(board, "0");
if(zero > 80) {
return board;
} else {
char *possibilities = getPossibilities(zero, board);
if(possibilities != '\0') {
for(int i = 0; i < strlen(possibilities); i++) {
char *new_string = malloc(strlen(board) * sizeof(char));
memcpy(new_string, board, strlen(board));
new_string[zero] = possibilities[i];
return solve(new_string);
}
}
}

}

理想情况下,函数应该在字符串不再包含任何“0”时返回。但是我得到了一些奇怪的输出,如下所示:

The string is �96245781100060004504810390007950043030080000405023018010630059059070830003590007

我很难看到这个问题。该计划的完整要点是 here 。我希望有任何意见。预先感谢您!

最佳答案

char *new_string = malloc(strlen(board) * sizeof(char));

您需要分配“\0”终止符,并将其更改为

char *new_string = malloc(strlen(board) + 1);

并将 memcpy 更改为 strcpy

char * strcpy(new_string, board);

关于c - C 中的递归不返回字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19371761/

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