Не работает программа в C

Рейтинг: -1Ответов: 1Опубликовано: 27.02.2023

у меня не работает программа на C. Я не могу понять в чем проблема, компилируется без ошибок, но ввесто адекватной работы пишет "Segmentation fault". Подскажите пожалуйста, в чём проблема?

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

int chifrres(char* x, char* y, int z);

int chifrres(char* x, char* y, int z) {
    return atoi(x) + atoi(y) + z;
};

char* add(char* x, char* y);

char* add(char* x, char* y) {
   char* result;
   char* y2;
   char* x2;
   x2[0] = '\0';
   strcat(x2, "0");
   strcat(x2, x);
   y2[0] = '\0';
   for (long i = 0; i < strlen(x) - strlen(y) + 1; i++) strcat(y2, "0");
   strcat(y2, y);
   int z = 0;
   int n = strlen(x2);
   for (long i = 1; i < n; i++) {
       result[n-i] = chifrres(&x2[n-i], &y2[n-i], z);
   };
   if (result[0] == 0) result = result + 1;
   return result;
};

char* multiply(char* x, int y);

char* multiply(char* x, int y) {
   char* z = x;
   for (int i = 0; i < y; i++) {
       z = add(z, x);
   };
   return z;
};

void main() {
   char* x = "37";
   x = multiply(x, 3);
   printf("%s", x);
}

(Суть программы в том, чтобы умножать числа без переполнения)

Ответы

▲ 2

Можно взять буквально первые попавшиеся строки.

char* x2;
x2[0] = '\0';

В x2 содержится мусор, неизвестное значение. Вы пытаетесь по этому адресу, указывающему неизвестно куда, писать значение. Это - неопределенное поведение, могущее выражаться и в этот segmentation fault.

При попытках записывать что-то куда-то, это куда-то должно представллять собой разрешенную для записи память - переменную, например, или выделенную динамически память.

Что именно вам подходит больше - это решать вам.