【问题标题】:output of array is different from input数组的输出与输入不同
【发布时间】:2012-12-14 22:54:22
【问题描述】:

我正在输入

1
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

但由于某种原因,我将其作为我的输出 HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHH

它应该在所有 H 中输出完全相同的东西,但不是输出更少的随机 I。那是什么?

#include <iostream>

using namespace std;

const int arrayElements = 40;
int main()
{
    int lineInputs = 0;

    cin >> lineInputs;

    char mySexyArray [lineInputs-1][arrayElements-1];
    int whatever =0;
    for (int i=0;i<lineInputs;i++)
    {
       // cin >> whatever;
        for (int j=0;j<arrayElements;j++)
        {
           cin >>mySexyArray[i][j];
        }
    }




    for (int i=0;i<lineInputs;i++)
    {
        for (int j=0;j<arrayElements;j++)
        {
          cout << mySexyArray[i][j]<<"";
        }
        cout << endl;
    }

    return 0;
}

【问题讨论】:

  • lineInputs输入1时,lineInputs-1的值是多少?
  • 当 lineInputs 不是常量时,如何声明 char mySexyArray [lineInputs][arrayElements],应该报错
  • @StackHeapCollision:这是可以理解的,大多数编译器通过扩展支持可变长度数组,并不是每个人都使用-pedantic 编译代码,理想情况下应该这样做。
  • 您是否考虑过使用std::vector&lt;std::string&gt; 而不是C 样式的数组?它会让你的代码更整洁,更不容易出现错误和缓冲区溢出。

标签: c++ arrays for-loop multidimensional-array


【解决方案1】:

您正在覆盖数组的边界,导致 未定义的行为
当您的程序具有未定义行为时,它可以向您显示任何输出。

你的数组声明是:

char mySexyArray [lineInputs-1][arrayElements-1];

当你的循环运行时:

 for (int i=0;i<lineInputs;i++)
    {
        for (int j=0;j<arrayElements;j++)

数组下标从0开始,所以只写到不属于你数组的内存。

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多