这是我使用的代码。我经常得到一个错误,称为“运行时检查失败#2 - 变量'字符串'周围的堆栈已损坏。”我不知道如何破坏数据。我能做什么吗?
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
int result;
char string[5];
cout << "Enter a number in 5 digits (type 0's if less than 5 digits): ";
cin >> string;
result = atol(string);
cout << result << "\n";
system("pause");
return 0;
}
答案 0 :(得分:3)
string
有5个字符的空间。
\ 0终止符需要额外的空间。
输入4位数字或将字符串更改为总共6个字符长度。
(或者,因为你使用C ++,找到另一种方法,你不必依赖固定长度的char缓冲区)
答案 1 :(得分:0)
您的代码有缓冲区溢出,因为它不会阻止用户溢出string
。
快速解决方法是:
cin >> std::setw( sizeof string ) >> string;
您可能希望将string
的大小增加到6
,以便允许输入5
个数字,记住C样式字符串需要空终止符。
如果使用std::string
而不是char数组,那么需要预设大小的限制就会消失。