Printf递归字符串函数奇数行为

时间:2019-03-13 05:03:18

标签: c recursion printf

我有这个递归字符串函数和一个辅助函数,它结合了两个字符串(char指针):

#include <stdio.h>
#include <stdlib.h>

char* stringcat(char* s1, char* s2)
{
    int length=0;
    int sizes[2];
    int c=0;

    while(s1[c]!='\0')
            ++c;
    length=c;
    sizes[0]=c;
    c=0;
    while(s2[c]!='\0')
            ++c;
    length+=c;
    sizes[1]=c;

    char *comboword=malloc(sizeof(char)*length);

    for(int i=0; i<sizes[0]; i++)
            comboword[i]=s1[i];

    for(int j=sizes[0]; j<length; j++)
            comboword[j]=s2[j-sizes[0]];

return comboword;

}

char* mmfu(int mm)
{
            char* mmm="mm";
            if (mm<=0)
                    return mmm;
            else
                    return stringcat(mmm,mmfu(mm-1));
}

我这样称呼它:

int main()
{
    int d;
    scanf("%d",&d);

    printf("%s %d\n",mmfu(1),d);
}

对于d为1和0的情况,输出是预期的mmmm(d)和mm(d),但是对于大于1的任何值,输出结果都是▒{▒6mmmm(使用mmfu(3)和d = 6 )或毫米波(2)和d = 5的▒{▒5m。我可以看到奇数输出有某种模式,但是我对为什么它首先出现感到非常困惑。任何帮助表示赞赏。谢谢!

0 个答案:

没有答案