我应该写一个简单的程序,允许用户在程序中输入他们的姓氏。然后程序将其姓氏输出到屏幕上。但是,当我运行程序时,我看到错误“变量最后的堆栈已损坏”。幸运的是,这是一个非常短的程序,但是,我仍然感到困惑,究竟是什么导致了问题的发生。
我已经尝试将数组的大小从其中的元素数量更改为其中的字节数。我试过这个,因为数组是由字符而不是整数组成的。
赋值表明输入的数组不能大于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;
}
char last[MAX];
cin >> last[MAX];
该数组具有MAX元素,索引从0开始。这意味着最后一个元素位于索引MAX-1;
变量最后的堆栈被破坏了
这是因为您正在访问last[MAX]
,它超过了为阵列分配的内存。
它应该是
cin >> last;
cin >> last[MAX];
应该
cin >> last;
但更好的是使用std::string
而不是char数组。
last[MAX]
不受限制访问,(并且只允许检索一个字符)