在給定的C 程式中,strtol 的用法看起來像是利用了事實上,成功的字串到長整數轉換應該使第二個參數(endptr) 等於NULL 以確定錯誤。然而,顯示的錯誤訊息表明情況並非總是如此。
strtol 中錯誤偵測的正確方法涉及幾個步驟:
1。將 errno 設為 0: 標準 C 函式庫函數不會將 errno 設為 0,因此在呼叫 strtol 之前手動執行此操作可確保遇到的任何錯誤都會反映在 errno 中。
2。檢查轉換結果:如果strtol回傳0或LONG_MIN/LONG_MAX且errno設定為ERANGE,則表示轉換錯誤或值超出範圍。
3.區分錯誤類型: 在某些情況下,您可能需要區分特定的錯誤類型,例如尾隨垃圾或無效的數字格式。這可以透過檢查 endptr 的位置和 errno 中的錯誤值來實現。
這是parseLong 函數的修訂版本:
static long parseLong(const char *str) { char *temp; errno = 0; // Reset errno 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; // Handle errors by returning a specific value like 0 } return val; }
如果出現錯誤,函數傳回0,如果發生錯誤,則回傳轉換後的值成功。
此錯誤分析的關鍵要點是使用全面的錯誤處理方法,包括設定 errno、檢查轉換結果和區分錯誤類型。這確保了在進行字串到數字轉換時程式碼的健全和可靠。
以上是使用C的`strtol`函數時如何正確處理錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!