2012-10-18 45 views
1

我們向其提供源代碼的客戶之一表示,通過將int更改爲atoi和atoi,他們獲得了不同的程序結果。但據我所知,Windows上的int和long具有相同的4字節大小和相同的最小/最大值。在同樣的比喻中,我預計atoi和atol可以產生相同的輸出,而且我們的測試也是如此。atoi和atol在windows中的區別

那些我不知道的命令有什麼區別嗎?

+0

do'sizeof(int)'和'sizeof(long)'給出了相同的結果嗎? – Default

+0

對「得到不同結果」做了什麼計算? – Default

+1

這是在一個不尋常的平臺上嗎?嵌入式設備也許? – Telgin

回答

2

在非錯誤的情況下,函數被定義既相當於

strtol(nptr, (char **)NULL, 10) 

,唯一的區別是,atoi投射返回值int

在錯誤情況下(當字符串表示超出該類型範圍的值)時可能會有不同的行爲,因爲行爲對於兩者都是未定義的。但我會很驚訝。即使atoiatol未通過調用strtol實現,它們可能是由相同的代碼或非常相似的實現的。

就我個人而言,我會要求客戶給我看確切的代碼。也許他們並不僅僅取代int->longatoi->atol,因爲他們聲稱。如果這一切都發生了變化(但是他們的測試方式與您在測試時假設的方式略有不同),他們可能已經發現代碼中存在一個錯誤的症狀。

相關問題