''变量周围的堆栈已损坏“。如何确定数组的大小?

问题描述 投票:-2回答:2

我应该写一个简单的程序,允许用户在程序中输入他们的姓氏。然后程序将其姓氏输出到屏幕上。但是,当我运行程序时,我看到错误“变量最后的堆栈已损坏”。幸运的是,这是一个非常短的程序,但是,我仍然感到困惑,究竟是什么导致了问题的发生。

我已经尝试将数组的大小从其中的元素数量更改为其中的字节数。我试过这个,因为数组是由字符而不是整数组成的。

赋值表明输入的数组不能大于10(由9个字符组成)。这就是全局变量“MAX”存在的原因。

#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
using namespace std;

const int MAX = 10;

int main()
{ 
    char last[MAX];
    int size = 0;

    cout << "Enter you last name with no more than 9 characters: "
             << endl;
    cin >> last[MAX];

    size = sizeof(last);

    cout << "This is your last name: " << endl;
    cin >> last;

    return 0;
}
c++ arrays char size
2个回答
4
投票
char last[MAX];
cin >> last[MAX];

该数组具有MAX元素,索引从0开始。这意味着最后一个元素位于索引MAX-1;

变量最后的堆栈被破坏了

这是因为您正在访问last[MAX],它超过了为阵列分配的内存。

它应该是

cin >> last;

0
投票
cin >> last[MAX];

应该

cin >> last;

但更好的是使用std::string而不是char数组。

last[MAX]不受限制访问,(并且只允许检索一个字符)

© www.soinside.com 2019 - 2024. All rights reserved.