2017-07-27 54 views
3

我想用戶輸入轉換成無符號短:如何檢查溢出轉換的char * []爲無符號短

int main(int argc, char *argv[]) 
{ 
    unsigned short tl; 
    tl = (unsigned short) strtoul(argv[2], NULL, 0); 
} 

比如:「555555」溢出用戶輸入併成爲31267。

如何在嘗試轉換輸入時停止/檢查溢出?什麼是阻止這種情況發生的最有效和最有效的方法?

非常感謝提前。

回答

5

如果你看看strtoul on cppreference.com

文檔如果轉換值掉下來的相應的返回類型的範圍,發生範圍錯誤並返回ULONG_MAX或ULLONG_MAX。

您應該能夠通過檢查errno來檢測ERANGE

像這樣的東西應該爲你工作,因此:

#include <limits> 
#include <cerror> 

auto n = strtoul(argv[2], NULL, 0); 
if (errno == ERANGE || n > std::numeric_limits<unsigned short>::max()) { 
    // Handle overflow 
} 
else { 
    // Do something 
}