首頁 >後端開發 >C++ >使用strtol將字串轉換為長整型時如何穩健地處理錯誤?

使用strtol將字串轉換為長整型時如何穩健地處理錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-15 15:08:34664瀏覽

How Can I Robustly Handle Errors When Using strtol to Convert Strings to Long Integers?

使用 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;
}

此修改可確保函數在發生錯誤時傳回零或最小/最大長值,從而提供有關錯誤。

其他注意事項

您可能需要檢查的其他錯誤條件包括:

  • 整數表示後的尾隨垃圾字元
  • 無效的數字字串(例如, "abc")
  • 對於長資料型別來說值太大或太小

以上是使用strtol將字串轉換為長整型時如何穩健地處理錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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