本文匯總 C 標準庫 (C89/C99/C11) 及常見 POSIX/Windows 擴展函數,按功能分類列出**核心原型**、**所需頭檔**、**典型用途**。作為開發時快速查閱參考。詳細語義請查閱 `man 3 func` / MSDN / cppreference.com。
| 函數 | 功能 | 返回 |
|---|---|---|
| `isalnum(c)` | 字母或數字 | 非0/0 |
| `isalpha(c)` | 字母 | 非0/0 |
| `iscntrl(c)` | 控制字元 (0x00-0x1F, 0x7F) | 非0/0 |
| `isdigit(c)` | 十進制數字 '0'-'9' | 非0/0 |
| `isgraph(c)` | 可列印非空白 (0x21-0x7E) | 非0/0 |
| `islower(c)` | 小寫字母 | 非0/0 |
| `isprint(c)` | 可列印含空白 (0x20-0x7E) | 非0/0 |
| `ispunct(c)` | 標點符號 | 非0/0 |
| `isspace(c)` | 空白字元 (空格,\t,\n,\v,\f,\r) | 非0/0 |
| `isupper(c)` | 大寫字母 | 非0/0 |
| `isxdigit(c)` | 十六進制數字 | 非0/0 |
| `tolower(c)` | 轉小寫 | 轉換後字元 |
| `toupper(c)` | 轉大寫 | 轉換後字元 |
注意:參數為 `int` (需可表示 `EOF`),傳入 `char` 必轉 `unsigned char` 避免負值索引 UB:`isalpha((unsigned char)ch)`。
| 函數 | 功能 | 關鍵點 |
|---|---|---|
| `strlen(s)` | 長度 (不含 `\0`) | `size_t` |
| `strcpy(dst, src)` | 複製 (含 `\0`) | **危險**無長度檢查 |
| `strncpy(dst, src, n)` | 複製最多 n 字元 | **不保證** `\0` 結尾 |
| `strcat(dst, src)` | 追加 | **危險**緩衝區溢出 |
| `strncat(dst, src, n)` | 追加最多 n 字元 | 保證 `\0` 結尾 |
| `strcmp(s1, s2)` | 字典序比較 | <0,=0,>0 |
| `strncmp(s1, s2, n)` | 比較前 n 字元 | |
| `strchr(s, c)` | 尋找字元首次出現 | 返回指針/NULL |
| `strrchr(s, c)` | 尋找字元最後出現 | |
| `strstr(hay, needle)` | 尋找子字串 | |
| `strpbrk(s, set)` | 尋找集合中任一字元 | |
| `strspn(s, set)` | 前綴匹配集合長度 | |
| `strcspn(s, set)` | 前綴不匹配集合長度 | |
| `strtok(s, delim)` | 分割字串 (破壞原串、非線程安全) | 首次傳 s,後續傳 NULL |
| `strerror(errno)` | 錯誤碼轉訊息字串 | 線程安全版 `strerror_r` |
| `memset(s, c, n)` | 記憶體填充字元 | 高效置零/初始化 |
| `memcpy(dst, src, n)` | 記憶體複製 (無重疊) | 最快複製 |
| `memmove(dst, src, n)` | 記憶體複製 (允許重疊) | 安全覆蓋 |
| `memcmp(s1, s2, n)` | 記憶體比較 |
安全替代 (C11 Annex K / POSIX):`strcpy_s`, `strncpy_s`, `strcat_s`, `snprintf`, `memcpy_s`。
| 分類 | 函數 (double 版) | float 版 | long double 版 |
|---|---|---|---|
| 三角 | `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `atan2` | `sinf`... `atan2f` | `sinl`... `atan2l` |
| 雙曲 | `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh` | 同前綴 f | 同前綴 l |
| 指數對數 | `exp`, `exp2`, `expm1`, `log`, `log2`, `log10`, `log1p` | ||
| 冪/根 | `pow`, `sqrt`, `cbrt`, `hypot` | ||
| 取整/餘數 | `floor`, `ceil`, `trunc`, `round`, `fmod`, `remainder`, `fma` | ||
| 絕對值 | `fabs` | `fabsf` | `fabsl` |
| 分解 | `frexp`, `ldexp`, `modf`, `ilogb`, `scalbn` | ||
| 誤差/特殊 | `erf`, `erfc`, `tgamma`, `lgamma`, `nan`, `nextafter` |
錯誤處理:`errno` (EDOM, ERANGE) + `math_errhandling`。`#pragma STDC FENV_ACCESS ON` 開啟浮點環境存取。
| 類別 | 關鍵函數 |
|---|---|
| 檔案操作 | `fopen`, `fclose`, `fflush`, `freopen`, `setbuf`, `setvbuf`, `fseek`, `ftell`, `rewind`, `fgetpos`, `fsetpos`, `feof`, `ferror`, `clearerr`, `fileno`, `tmpfile`, `tmpnam`, `remove`, `rename` |
| 格式化 I/O | `printf`, `fprintf`, `sprintf`, `snprintf`, `vprintf`, `vfprintf`, `vsprintf`, `vsnprintf`, `scanf`, `fscanf`, `sscanf`, `vscanf`, `vfscanf`, `vsscanf` |
| 字元/行 I/O | `fgetc`, `fputc`, `getc`, `putc`, `getchar`, `putchar`, `fgets`, `fputs`, `gets` (已棄用/移除), `ungetc` |
| 二進制 I/O | `fread`, `fwrite` |
| 標準流 | `stdin`, `stdout`, `stderr` |
| 函數 | 功能 |
|---|---|
| `malloc(size)` | 分配未初始化 |
| `calloc(n, size)` | 分配並歸零 |
| `realloc(ptr, size)` | 調整大小 |
| `free(ptr)` | 釋放 |
| `aligned_alloc(align, size)` | C11 對齊分配 |
| 函數/類型 | 功能 |
|---|---|
| `time_t time(time_t*)` | 當前時間戳 (秒) |
| `clock_t clock()` | 處理器時間 (ticks) |
| `struct tm` | 日曆時間分量 |
| `gmtime`, `localtime` | 時間戳 → `tm` (UTC/本地) |
| `mktime` | `tm` → 時間戳 (本地) |
| `strftime` | 格式化 `tm` → 字串 |
| `asctime`, `ctime` | 固定格式輸出 (非線程安全) |
| `difftime` | 兩時間戳差 (秒) |
| `timespec_get` (C11) | 高精度時間 (納秒) |
| 函數 | 功能 |
|---|---|
| `exit(status)` | 正常終止 (執行 atexit、刷新流) |
| `_Exit(status)` / `_exit()` | 立即終止 (不清理) |
| `atexit(func)` | 註冊退出處理器 |
| `system(cmd)` | 執行 Shell 命令 |
| `getenv(name)` | 獲取環境變數 |
| `bsearch`, `qsort` | 二分查找、快速排序 |
| `abs`, `labs`, `llabs`, `div`, `ldiv`, `lldiv` | 整數絕對值/除法 |
| `rand`, `srand` | 偽隨機數 |