atol操作的C ++错误

时间:2014-10-13 03:29:28

标签: c++ string

这是我使用的代码。我经常得到一个错误,称为“运行时检查失败#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;
}

2 个答案:

答案 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数组,那么需要预设大小的限制就会消失。