首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字符串轉數字全攻略:atoi 族函數與 strto* 進階用法

     編輯:關於C語言

C語言字符串轉數字全攻略:atoi 族函數與 strto* 進階用法

標準庫提供多組轉換函數,按返回類型與錯誤處理能力分級。

基礎轉換函數(簡單但無錯誤檢測)

int num = atoi("100");      // 字符串 → int
long ln = atol("12345");    // 字符串 → long
double d = atof("3.14");    // 字符串 → double
  • 忽略前導空白,遇非數字字符停止。
  • 溢出行為未定義,無法區分「轉換結果為 0」與「輸入無效」。

進階轉換函數(支持錯誤檢測與殘留字符報告)

函數返回類型特性
strtollong支持基數(2~36),endptr 返回未轉換部分
strtoulunsigned long無符號長整型,溢出返回 ULONG_MAX 並置 errno=ERANGE
strtoddouble雙精度浮點,同樣支持 endptr 與 errno

溢出檢測實戰

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>

int main() {
    char *str = "1234567891011121314151617181920";
    char *leftover;
    errno = 0;
    unsigned long num = strtoul(str, &leftover, 10);
    printf("Original: %s\nConverted: %lu\nLeftover: %s\nerrno: %d\n",
           str, num, leftover, errno);
    // 輸出:Converted: 4294967295 (ULONG_MAX), errno=ERANGE
    return 0;
}
  • endptr(此處 leftover)指向導致停止的字符,可用於解析「數字+單位」格式(如 "100px")。
  • errno == ERANGE 明確指示溢出。
  • 基數 0 時自動識別 0x(十六進制)、0(八進制)前綴。

選擇建議

  • 簡單場景、確信輸入合法:atoi/atof 碼少快。
  • 需健壯解析、錯誤處理、獲取殘留字符:首選 strtol/strtod。
  • 嵌入式無標準庫:可手寫簡易 atoi(累乘加減)。

掌握 strto* 族函數,是編寫健壯 C 解析代碼的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved