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

C 標準庫 完整解析:類型、宏與常用函數

     編輯:C 語言問答

頭文件作用

<stdlib.h>(C++ 中為 <cstdlib>)定義了通用工具函數,涵蓋內存管理、程序控制、字符串轉換、隨機數、搜索排序、絕對值、多字節字符轉換、環境變量等核心功能,是 C 程序「標準工具箱」。

定義的關鍵類型

類型說明
size_t無符號整數,sizeof 返回類型,用於對象大小、數組索引
wchar_t寬字符類型,支持多字節字符集(如 Unicode)
div_tdiv() 返回結構:int quot; int rem;(商、餘數)
ldiv_tldiv() 返回結構:long quot; long rem;
lldiv_tlldiv() 返回結構:long long quot; long long rem; (C99)

常用宏常量

宏值/含義
EXIT_SUCCESS程序成功退出碼(通常為 0)
EXIT_FAILURE程序失敗退出碼(通常為 1)
RAND_MAXrand() 返回的最大值(至少 32767)
MB_CUR_MAX當前區域設置下多字節字符的最大字節數
NULL空指針常量(亦定義於 <stddef.h> 等)

核心函數分類速查

類別函數用途
動態內存管理malloc(size_t size)分配未初始化內存塊
calloc(size_t n, size_t size)分配並歸零內存(n*size 字節)
realloc(void *ptr, size_t size)調整已分配內存大小
free(void *ptr)釋放內存
aligned_alloc(size_t align, size_t size)對齊分配 (C17)
程序控制exit(int status)正常終止進程,執行清理(atexit、刷新流)
abort(void)異常終止,不執行清理,生成核心轉儲
atexit(void (*func)(void))註冊退出時調用的函數(棧式)
system(const char *cmd)調用宿主環境命令處理器執行命令
字符串轉換atoi/atol/atoll字符串轉 int/long/long long(無錯誤檢測)
strtol/strtoul/strtoll健壯轉換,支持進制、錯誤指針、溢出檢測
strtod/strtof/strtold字符串轉 double/float/long double
itoa/ltoa/ulltoa整數轉字符串(非標準,常見擴展)
隨機數rand(void)生成偽隨機數 [0, RAND_MAX]
srand(unsigned seed)設置隨機種子(常用 time(NULL))
random/rand_rBSD/POSIX 可重入版本(非標準)
搜索/排序qsort(void *base, size_t nmemb, size_t size, int(*cmp)(const void*,const void*))快速排序(不穩定),通用比較函數
bsearch(const void *key, const void *base, size_t nmemb, size_t size, int(*cmp)(const void*,const void*))二分查找(要求已排序)
多字節/寬字符mblen/mbtowc/wctomb單字符轉換
mbstowcs/wcstombs字符串轉換
環境變量getenv(const char *name)獲取環境變量值
putenv/setenv/unsetenv設置/刪除環境變量 (POSIX)
絕對值abs/labs/llabs整數絕對值
div/ldiv/lldiv商餘同時獲取

最佳實踐提示

  • 內存分配必檢查返回值: if (!ptr) { perror("malloc"); exit(EXIT_FAILURE); }
  • 釋放後置空: free(ptr); ptr = NULL; 防雙重釋放/懸空指針。
  • 隨機數種子只播一次: 程序啟動時 srand((unsigned)time(NULL)),勿在循環中重複調用。
  • 字符串轉數字優先用 strto* 族: 能檢測溢出、非法字符、進制前綴(0x, 0)。
  • qsort 比較函數: 返回負/零/正分別表示小於/等於/大於,避免溢出寫法 return *(int*)a - *(int*)b; 改用條件判斷。

總結

<stdlib.h> 是 C 程序內存、進程、轉換、隨機、排序的基石。熟練掌握其 API 與陷阱,能寫出健壯、可移植、高性能的系統級代碼。

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