Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

C 標準庫字串轉數值函數完整對照:atoi、atol、strtod、strtol、strtoul

編輯:Linux 教學

C 標準庫提供多種字串轉數值函數,功能、錯誤處理、進制支援各有差異。本文整理 atof、atoi、atol、strtod、strtol、strtoul、gcvt、toascii、tolower、toupper 等函數原型、行為、回傳值、錯誤代碼與等效關係,供快速查閱。

一、浮點數轉換

函數原型說明等效關係
atofdouble atof(const char *nptr)跳過空白,解析浮點數(支援科學記號)strtod(nptr, (char**)NULL)
strtoddouble strtod(const char *nptr, char **endptr)同 atof,若 endptr 不為 NULL 回傳結束位置—
gcvtchar *gcvt(double number, size_t ndigits, char *buf)浮點數轉字串(四捨五入),含小數點/符號—

二、整數轉換

函數原型說明等效關係
atoiint atoi(const char *nptr)轉換為 intstrtol(nptr, (char**)NULL, 10)
atollong atol(const char *nptr)轉換為 longstrtol(nptr, (char**)NULL, 10)
strtollong strtol(const char *nptr, char **endptr, int base)依 base (2–36 或 0) 轉長整數,支援 0x 前綴—
strtoulunsigned long strtoul(const char *nptr, char **endptr, int base)轉無號長整數,base 同 strtol—

三、關鍵行為差異

  • 錯誤處理:atoi/atol/atof 無錯誤回傳(轉換失敗回 0/0.0,無法區分 "0" 與錯誤);strtol/strtoul/strtod 透過 endptr 與 errno(ERANGE)報告錯誤
  • 進制支援:strtol/strtoul 支援 2–36 進制,base=0 時自動識別 0x (16進制)、0 (8進制)、其他 (10進制)
  • 溢位:strtol 溢位回傳 LONG_MAX/LONG_MIN 並設 errno=ERANGE;strtoul 回傳 ULONG_MAX

四、字元處理函數

五、使用建議

  1. 新程式碼優先使用 strtol/strtoul/strtod,具備完整錯誤檢查
  2. 簡單情況(確定輸入合法)可用 atoi/atol
  3. 需支援多進制輸入必須用 strtol/strtoul
  4. endptr 參數務必檢查:if (*endptr != '\0') /* 輸入含非數字字元 */
Copyright © Windows教程網 All Rights Reserved
函數標頭檔說明
toascii<ctype.h>取字元低 7 位(第 8 位清零),轉為合法 ASCII
tolower<ctype.h>大寫轉小寫,非字母原樣回傳
toupper<ctype.h>小寫轉大寫,非字母原樣回傳