Printf Рекурсивная строковая функция Нечетное поведение - PullRequest
0 голосов
/ 13 марта 2019

У меня есть эта рекурсивная строковая функция и вспомогательная функция, которая объединяет две строки (указатели на символы):

#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, выходной сигнал соответствует ожидаемым значениям, мммм (d) и мм (d), но для значений, превышающих 1, выходной сигнал равен like {▒ 6 ммм (с mmfu (3) и d = 6). ) или ▒ {▒ 5 м для ммфу (2) и d = 5. Я могу видеть, что есть некоторый образец к нечетному выводу, но я очень смущен тем, почему это происходит во-первых. Любая помощь приветствуется. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...