首頁 >後端開發 >C++ >在 C 中使用 strtol 將字串轉換為長整數時如何可靠地偵測錯誤?

在 C 中使用 strtol 將字串轉換為長整數時如何可靠地偵測錯誤?

Linda Hamilton
Linda Hamilton原創
2024-12-14 20:36:16558瀏覽

How Can I Reliably Detect Errors When Converting Strings to Long Integers Using strtol in C?

使用strtol 偵測字串到長整型轉換中的錯誤

在C 程式設計中,strtol 函數通常用於轉換a 的函數通常用於轉換a 的函數字串表示形式長整數為其數值。然而,單獨使用 strtol 可能無法總是提供足夠的錯誤處理。

問題:

提供的程式碼示範了程式正確將字串轉換為長整數的場景,但也會列印錯誤訊息,指出「儘管轉換成功,但無法轉換」。這是因為程式假設如果 strtol 成功轉換字串,則第二個參數(表示剩餘字串)應該為 NULL。但是,即使轉換成功,某些條件也可能導致非 NULL 剩餘字串出現。

解決方案:

要準確檢測strtol 中的錯誤,請考慮以下改進:

  1. 使用專用函數調用strtol: 這可以改善程式碼組織和可讀性。
  2. 檢查多個錯誤條件: strtol 錯誤處理很複雜。除了剩餘內容之外,您還應該檢查無效的數字字串、數字溢位和前導/尾隨空格。
  3. 在呼叫 strtol 之前將 errno 明確設定為 0: 這可確保 errno 正確設定以指示遇到的任何錯誤。
  4. 檢查特定錯誤值:如果發生錯誤,檢查與 ERANGE 關聯的 errno 值(數字溢位)。

修訂的函數:

修訂後的函數傳回一個使用布林值來指示轉換是否成功或不是。您可以如下使用它:

附加說明:

您可以進一步自訂該函數來處理空白修剪或限制轉換為僅十進制值。

    在某些情況下,您可能需要更精細的錯誤回報機制,例如傳回錯誤代碼或拋出錯誤例外。

以上是在 C 中使用 strtol 將字串轉換為長整數時如何可靠地偵測錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn