2013-03-06 116 views
0

我的平臺是Windows 7 x64。此代碼:VS變量周圍的報告堆棧已損壞

#include <iostream> 
#include <string> 
#include <stdint.h> 
#include <sstream> 
using namespace std; 

int main() 
{ 

    string line; 
    int c = 3; 

    while(c-- && getline(cin, line)) 
    { 
     stringstream sstr; 
     sstr << line; 

     uint32_t data; 

     int r = sscanf(sstr.str().c_str(), "%d", &data); 

     if (r == 1) 
     { 
      cout << data << endl; 
     } 
    } 

    return 0; 

} 

以整數作爲輸入,打印它們並存在正常。如果我改變的data類型uint16_t,那麼就從main()函數返回前,相較於2010年拋出一個錯誤:

運行時檢查失敗#2 - 堆棧周圍的變量「數據」被損壞

我想知道爲什麼VS 2010在uint16_t很生氣?任何解釋?

+1

那麼,你的平臺上'int'的大小是多少? – 2013-03-06 18:47:06

+0

作爲奧利說,我的猜測將是整數大小 – 2013-03-06 18:47:54

+0

它是4字節@OliCharlesworth – Donotalo 2013-03-06 18:48:17

回答

2

可能是因爲%d引用了32位值。對於16位值,嘗試使用%hd

相關問題