2014-10-13 64 views
0

这是我使用的代码。我通常会得到一个错误,称为“运行时检查失败#2 - 变量'字符串'周围的堆栈已损坏。”我不知道如何不破坏数据。有什么我可以做的吗?关于atol动作的C++错误

#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

你输入了什么? –

+1

理想情况下,使用C++时 - 避免使用原始字符数组 - std :: string为您提供所有您需要的内容......没有内存风险。 – parade

回答

3

string有5个字符的空间。

您需要\ 0终止符的额外空间。

输入4位数字或将字符串更改为总共6个字符长度。

(或者因为你在C++的时候,找到另一种方法,你不必依靠固定长度的字符缓冲区)

+0

谢谢,它现在有效。 –

0

代码有缓冲区溢出,因为它不会阻止用户溢出string

一个快速的解决方法是:

cin >> std::setw(sizeof string) >> string; 

您可能需要增加的string大小6为了让5数字来输入,记住,C风格字符串需要一个空终止符。

如果使用std::string而不是char数组,那么需要预设大小的限制就会消失。