Почему возникает ошибка при попытке сравнить два целых числа?

При попытке выполнить операцию сравнения двух целых чисел возникает ошибка. Как исправить эту ошибку?
 
 #define _CRT_SECURE_NO_WARNINGS
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <locale.h>
 #include <math.h>
 void rev(const char* const c)
 {
     if (*c)
     {
         rev(c + 1);
         putchar(*c);
     }
 }
 
 int strfind(const char* const c, char* a) {
 
 }
 int Convert() {
     setlocale(LC_ALL, "Rus");
     char alph[36] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     int s1, s2;
     char num[37], result[10000] = "";
     printf("Введите систему счисления числа, которое надо преобразовать \n");
     scanf("%d", &s1);
     printf("Введите число до 36 символов \n");
     scanf("%s", &num);
     printf("Введите систему счисления числа, которое надо преобразовать \n");
     scanf("%d", &s2);
     long numInTenSys = 0;
     int n = strlen(num);
     num[n] = 0;
     long preresult;
     long preresult2;
     int substring;
     
     for (int i = 0; i < n; i++) {
         preresult = pow(s1, (n - i -1));
         substring= num[i];
         preresult2 = strchr(alph, substring) - alph;
         numInTenSys += preresult*preresult2;
     }
     int mod, div;
     while (1) {
         mod = numInTenSys % s2;
         div = numInTenSys / s2;
         strcat(result, alph[mod]);
         if (div < s2) { // Здесь возникает ошибка
             strcat(result, alph[div]);
             break;
         }
         numInTenSys = div;
     }
     rev(result);
     printf("%s", result);
     return 0;
 }
  • 2 октября 2023 г. 19:57
Ответы на вопрос 2
Ошибка возникает из-за попытки сравнить целое число `div` с символом `s2`. Чтобы исправить эту ошибку, нужно изменить тип данных переменной `div` на `int`, чтобы можно было сравнить его с `s2`. Замените строку `int div;` на `int div = 0;`, чтобы явно указать тип данных переменной `div`.
Отключите оптимизацию и соберите проект в режиме отладки. Возможно, в вашем коде есть неопределенное поведение и проблемы с управлением памятью. Иногда ошибка может проявляться не там, где она фактически происходит. 
Я заметил проблему в этой строке: strcat(result, alph[mod]). Вы добавляете строку с адресом alph[mod] к строке, на которую указывает result. Обратите внимание, что это не строка, начинающаяся с позиции mod в массиве alph, а строка с адресом, например, символа 'F'. Возможно, вы не хотите копировать часть строки alph в result. Кроме того, массив alph[] не имеет места для терминирующего символа 0, поэтому вызов strcat может привести к переполнению буфера. Вам нужно просто добавить один символ в конец result. Нет встроенных функций для этого. Ведите счетчик символов в вашем ответе и просто присвойте значение result[cnt].
Похожие вопросы