打印输入字符的所有组合的功能未按预期打印

我的程序的目标是打印用户可以输入的所有字符组合,只要它们不超过最大长度即可。我能够用字符正确地填充数组,显示输入的字符数,以及字符串的最大长度(由用户输入)。但是,功能不能按预期打印。理论上,如果用户输入的最大长度为2的2个字符(a,b),则程序应输出此字符...

a
b
aa
ab
ba
bb

取而代之的是,我的代码正在输出此内容,我不知道为什么...

a
ab

以下是我的两个功能。我的主要功能是获取用户输入的字符数,字符数组以及要输出的字符串的最大长度。之后,它将调用generatePassword函数。任何帮助,将不胜感激!

int crack(char *characters[], int i, char s[], int numCharacters, int passwordLength) {
    if (i==0) {
        printf("%s\n", s);
        return 0;
    }
    for (int j = 0; j < numCharacters; j++) {
        char string[MAX];
        strcpy(string, strcat(s, characters[j]));
        crack(characters, i-1, string, numCharacters, passwordLength);
    }
    return 0;
}


void generatePassword(char* characters[], int numCharacters, int passwordLength) {

    for (int i = 1; i < passwordLength; i++) {
        char s[MAX] = "";
        int num = crack(characters, i, s, numCharacters, passwordLength);
    }

}