我创建了一个简单的函数将十进制值转换为十六进制,它将转换较小的值并正确显示out pout,但是如果输入一些较大的值,则会出现以下错误
变六周围的Stach已损坏

我的功能是

double convertToHexadecimal(int a,char b)
{
    int hexa[2]={0}, x,y,i=1;

    cout << "Enter the Decimal Number to convert to Hexadecimal: "<<endl;
    cin >> x;

    y=x;

    do
    {
        hexa[i] = y%16;
        y = y/16;
        i--;

    } while(y>0);

    for (i=0;i<2;i++)
    {
        y = hexa[i];

        if (y==10)
            cout << 'A';
        else if (y==11)
            cout << 'B';
        else if (y==12)
            cout << 'C';
        else if (y==13)
            cout << 'D';
        else if (y==14)
            cout << 'E';
        else if (y==15)
            cout << 'F';
        else
            cout << y;
    }
    return y;
}

最佳答案

您的错误在于这部分:

do
{
    hexa[i] = y%16;
    y = y/16;
    i--;

} while(y>0);


由于您声明了2个元素的数组,因此将十六进制值的长度限制为2(最大数字将为FF(十六进制)或255(十进制))。因此,对于更大的数字,当y>0时将具有i<0,从而导致未定义的行为。

可能的解决方案:


增加阵列的长度,或者
使用字符串数据类型。


使用字符串将是一个不错的选择。

string hexa="";
int q;
while (y>0) {
    q = y%16;
    if (q == 10)
        hexa = 'A'+hexa;
    else if (q == 11)
        hexa = 'B'+hexa;
    else if (q == 12)
        hexa = 'C'+hexa;
    else if (q == 13)
        hexa = 'D'+hexa;
    else if (q == 14)
        hexa = 'E'+hexa;
    else if (q == 15)
        hexa = 'F'+hexa;
    else
        hexa = (q+'0')+hexa;
    y %= 16;
}
cout << hexa;

关于c++ - 变量周围的堆栈已损坏,Visual Studio 2010问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31057964/

10-11 19:11