数组显示比平常更多的结果

时间:2016-01-26 13:43:08

标签: c++ arrays binary decimal

这是我的代码:

#include <iostream>
using namespace std;

int main()
{
  char character;
  int x;
  cout << "Input a character: " ;
  cin >> character;
  x = int(character);
  cout << "Its integer value is: " << x << endl;
  int arr[7], i=0,j;
  while(x>0)
  {
    arr[i]=x%2;
    i++;
    x=x/2;
  }
  cout << "Its Binary format is: ";
  for (j=i; j>=0;j--)
  {
    cout<<arr[j];
  }
  return 0;
}

我只为此代码分配了8个数组空间,但显示的结果大于8,与算法完全无关。我怀疑这是一个溢出问题。 我该如何解决这个问题? 谢谢!

1 个答案:

答案 0 :(得分:5)

FOR tab IN
(select table_name from
Table_config)

EXECUTE_IMMEDIATE(
'declare
l_row '||table_name||'%ROWTYPE;
begin
INSERT INTO '||l_temp_table_name
SELECT * FROM '||l_table_name||' WHERE ROWNUM=1;
end;');

EXECUTE_IMMEDIATE ('SELECT ROWID FROM '||l_table_name)
INTO l_rowid;

END LOOP;

让这个循环执行一次。 循环结束后while(x>0) { arr[i]=x%2; i++; x=x/2; } 为1。但是,索引1处的数组元素未初始化。

通过尝试在此处打印来触发未定义的行为:

i

修复方法是将循环更改为

for (j=i; j>=0;j--) // assuming for should be here
{
    cout<<arr[j]; // access array element with index 1 (our example)
}

还要注意用户输入的数字是否大于(或等于)2的7次幂。您的阵列中没有地方存储所有数字。并且将通过尝试写入数组的末尾来再次触发未定义的行为。