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

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

Mary-Kate Olsen
發布: 2024-12-15 15:08:34
原創
606 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板