使用 strtol 處理錯誤
strtol 函數將字串轉換為長整型。雖然它對於從字串中提取數字資料很有用,但如果轉換不成功,它可能會產生錯誤。
了解strtol 的行為
strtol 將輸入字串分解為三個parts:空白字符,以指定基數表示的整數(通常為八進位0,十進位10 ,或16十六進制)以及任何剩餘的無法識別的字元。如果整數表示形式無效或字串包含無法辨識的字符,則不執行轉換。
錯誤偵測
要正確偵測 strtol 的錯誤,設定 errno 至關重要在呼叫函數之前清零。這確保任何錯誤都會將 errno 設為非零值。嘗試轉換後,您可以檢查 errno 的值。如果不為零,則發生錯誤。
修改parseLong 函數
要改進錯誤處理,請考慮修改parseLong 函數,如下所示:
static long parseLong(const char *str) { errno = 0; char *temp; long val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) { fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); return 0; // or LONG_MIN/LONG_MAX depending on error } return val; }
此修改可確保函數在發生錯誤時傳回零或最小/最大長值,從而提供有關錯誤。
其他注意事項
您可能需要檢查的其他錯誤條件包括:
以上是使用strtol將字串轉換為長整型時如何穩健地處理錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!