接受字符串输入后,数组的值会自动更改

values of array gets changed automatically after taking string input

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    long int m,i;
    cin>>m;
    float first=0,second=0,disp=0;
    int arr[m];
    char ch[m];
    for(i=0;i<m;i++)
    {
    cin>>arr[i];
    }
    cout<<" before="<<arr[0]<<endl;
    cin>>ch;
    cout<<" after="<<arr[0]<<endl;
    //puts(ch);
    return 0;
}

首先我在一个数组中插入元素,然后打印数组的第零个索引,然后我接受字符串输入。突然发生了什么!。我的数组第 0 个索引变了!!! 怎么可能,有人愿意解释一下吗

arr[0] 的值已更改,为什么?

问题是您为 cin >> ch; 输入了太多字符。由于 m == 40,您将其声明为 char ch[40]。这允许您输入 39 个字符(不是 40 个,因为尾随 '[=13=]' 字符),但您输入的比这多得多,所以它写在数组边界之外,这导致未定义的行为。在这种情况下,它溢出到 arr 数组中。

我建议你使用 std::string 而不是 char 数组,这样它会自动扩展到合适的大小。

您偶然发现了缓冲区溢出。维基百科有一个基本示例,以及有关此主题的更多详细信息。 (Read more)

当你越过 ch 数组的边界并写入它的相邻内存位置(在本例中恰好是 arr 数组).