вернуть указатель на символ из функции в c задаче - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь создать функцию, которая суммирует 2 строковых числа, например «888» и «9879», возвращающих «10767».

Проблема заключается в том, что при доступе к возвращаемому значению из main я получаю мусор.

typedef char* verylong;
verylong add_verylong(verylong vl1, verylong vl2);
int main(){
    verylong result = add_verylong("888", "9879");
    printf("%s\n", result);
    return 0;
}
verylong add_verylong(verylong vl1, verylong vl2){
    int len_1 = strlen(vl1);
    int len_2 = strlen(vl2);
    int vl1_number= 0;
    int vl2_number = 0;
    int mul = 1;
    while(len_1 > 0){
        int x = vl1[len_1-1] - '0';
        x = x * mul;
        vl1_number = vl1_number + x;
        mul *= 10;
        len_1--;
    }
    mul = 1;
        while(len_2 > 0){
        int x = vl2[len_2-1] - '0';
        x = x * mul;
        vl2_number += x;
        mul = mul * 10;
        len_2--;
    }
    int number = vl1_number + vl2_number;
    int length = 0;
    int temp = number; 
    while(temp > 0){
        length += 1;
        temp /= 10;
    }
    length++;
    char string[length+1];
    verylong result = string;
    result[length--] = '\0';   
    while(number > 0){
        int x = number % 10;
        char c = x +'0';
        result[length] = c;
        length--;
        number /= 10;
    }
    return result;   
}

В чем может быть причина этой проблемы?

1 Ответ

0 голосов
/ 16 января 2020

Все, что объявлено в функции, отличной от static, будет удалено из памяти, как только функция вернется. Таким образом, адрес result после выполнения функции будет содержать мусор, а не фактический вывод, который вы хотите.

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