Récursion en C ne renvoyant pas de valeur de chaîne

J’apprends le C et j’ai décidé d’écrire un solveur de Sudoku. J’ai de la difficulté à obtenir la fonction de résolution pour renvoyer un tableau résolu et je pense que le problème est lié à l’appel de fonction récursif.

Je passe le tableau sous forme de chaîne, trouve l’index du premier “0” dans le tableau et l’utilise pour créer une liste de valeurs possibles pour la position. Je parcours ensuite les possibilités, copie le tableau d’origine et remplace le zéro par la possibilité, puis passe le nouveau tableau de manière récursive à la fonction de résolution. Le code est ci-dessous:

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); } } } } 

Idéalement, la fonction devrait revenir lorsque la chaîne ne contient plus de “0”. Cependant, je reçois des résultats étranges qui ressemblent à:

 The ssortingng is  96245781100060004504810390007950043030080000405023018010630059059070830003590007 

J’ai du mal à cerner le problème. L’essentiel du programme est ici . J’aimerais n’importe quelle entrée. Merci d’avance!

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

vous devez affecter le caractère de fin ‘\ 0’ et le modifier en

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

et changez le memcpy en strcpy

char * strcpy (new_ssortingng, board);