Часть моего проекта, где мы должны взять входной файл с шестнадцатеричными числами и преобразовать их в код MIPS, я хочу преобразовать шестнадцатеричный код в двоичный, чтобы мне было проще преобразовать его в MIPS. Однако, когда я запускаю код, он падает и завершает работу, когда достигает части, где он вызывает функцию конвертера. GDB говорит, что это критическая ошибка c0000374. Как мне это исправить?
Я попытался дать целевой строке больше места, и это, похоже, не имеет никакого эффекта. Я также пытался использовать malloc безрезультатно.
char* convertBinary (int hex)
{
char* hexdec = calloc(9, sizeof(char));
char* bin = calloc(SIZE+1, sizeof(char));
snprintf(hexdec, SIZE, "%08X", hex);
long int i;
for (i = 0; hexdec[i]; ++i)
{
switch (hexdec[i])
{
case '0':
strcat(bin, "0000");
break;
case '1':
strcat(bin, "0001");
break;
case '2':
strcat(bin, "0010");
break;
case '3':
strcat(bin, "0011");
break;
case '4':
strcat(bin, "0100");
break;
case '5':
strcat(bin, "0101");
break;
case '6':
strcat(bin, "0110");
break;
case '7':
strcat(bin, "0111");
break;
case '8':
strcat(bin, "1000");
break;
case '9':
strcat(bin, "1001");
break;
case 'A':
case 'a':
strcat(bin, "1010");
break;
case 'B':
case 'b':
strcat(bin, "1011");
break;
case 'C':
case 'c':
strcat(bin, "1100");
break;
case 'D':
case 'd':
strcat(bin, "1101");
break;
case 'E':
case 'e':
strcat(bin, "1110");
break;
case 'F':
case 'f':
strcat(bin, "1111");
break;
default:
printf("\nInvalid hexadecimal digit %c",
hexdec[i]);
}
}
return bin;
}
Также, в случае, если это помогает, вот основная функция, где я вызываю эту функцию
int main ()
{
int command = 10010100; //This is in hex
char* binaryString = convertBinary(command);
printf("The coverted binary is: %s\n", binaryString);
}
Я ожидаю, что функция вернет строку двоичных чисел, которые были преобразованы из шестнадцатеричного числа из 8 цифр. Однако программа просто выходит и ничего не выводит. При отладке с помощью GDB выдает предупреждение:
warning: Critical error detected c0000374