正確使用strtol 進行錯誤處理
以下C 或C 程式將字串轉換為長整數,依賴於strtol 傳回的事實NULL表示成功轉換。但是,當給定值 55 時,它會失敗並顯示以下訊息:
./convertToLong 55 Could not convert 55 to long and leftover string is: 55 as long is 55
本文探討瞭如何正確檢測 strtol 中的錯誤並解決給定程式中的問題。
strtol 中的錯誤處理
strtol(以及strtoll 等相關函數)的官方規範指出即:
修正程式
在 C 中,可以透過設定來偵測來自 strtol 的錯誤在呼叫函數之前將 errno 設為零。下面修改後的parseLong 函數遵循以下方法:
static long parseLong(const char *str) { errno = 0; char *temp; long val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">bool parseLong(const char *str, long *val) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); // cerr << "Could not convert '" << str << "' to long and leftover string is '" // << temp << "'\n"; return val; }
在 C中,更靈活的方法是返回成功/失敗指示符,並提供一個單獨的函數來提取轉換後的值:
結論
通過這些修改,parseLong 函數可以正確處理來自strtol 的錯誤,從而允許應用程式確定成功或轉換失敗並適當處理錯誤。
以上是在C和C中使用strtol時如何正確處理錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!