gpt4 book ai didi

c++ - 变量周围的堆栈已损坏,visual studio 2010 问题

转载 作者:太空宇宙 更新时间:2023-11-04 13:31:59 26 4
gpt4 key购买 nike

我创建了一个简单的函数来将十进制值转换为十六进制,它转换小值并正确显示输出,但是如果我输入一些大值,它会给我以下错误围绕变量 hexa 的 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 ,导致未定义的行为。

可能的解决方案:

  1. 增加数组的长度,或者
  2. 使用字符串数据类型。

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com