#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;
}
strcat(result, alph[mod]);
alph[mod]
к строке по адресу result. Обратите внимание, не строку, начинающуюся с позиции mod в массиве alph, а строку с адресом вроде кода символа 'F'. alph
скопировать в result
. Плюс у вас в alph[]
нет места под терминирущий 0, поэтому strcat
вызовет переполнение буфера. Вам там надо дописывать один символ в конец result. Библиотечных функций именно для этого нет. Заведите счетчик количества символов в ответе и тупо переписывайте значение result[cnt]
. #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) {
return -1;
}
int main() {
setlocale(LC_ALL, "");
char alph[37] = "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;
}