| 函數 | 功能 | 原型 | 關鍵行為 |
|---|---|---|---|
strcpy | 字串複製 | char *strcpy(char *dest, const char *src); | 複製含結束符,目的地需足夠空間 |
strncpy | 指定長度複製 | char *strncpy(char *dest, const char *src, size_t n); | 不足 n 補 \0,超過 n 不加 \0 |
strcat | 字串串接 | char *strcat(char *dest, const char *src); | 追加到 dest 末尾,需確保空間 |
strncat | 指定長度串接 | char *strncat(char *dest, const char *src, size_t n); | 最多附加 n 字元,自動加 \0 |
strcmp | 字串比較 | int strcmp(const char *s1, const char *s2); | 依 ASCII 碼序,相等回 0,大於回正,小於回負 |
strncmp | 指定長度比較 | int strncmp(const char *s1, const char *s2, size_t n); | 最多比較 n 字元 |
strchr | 尋找字元首次出現 | char *strchr(const char *s, int c); | 回傳指標或 NULL |
strrchr | 尋找字元最後出現 | char *strrchr(const char *s, int c); | 反向搜尋 |
strstr | 尋找子字串 | char *strstr(const char *haystack, const char *needle); | 回傳首次出現位址 |
strlen | 字串長度 | size_t strlen(const char *s); | 不含結束符 |
strspn | 符合字元集長度 | size_t strspn(const char *s, const char *accept); | 從開頭計算連續屬於 accept 的字元數 |
strcspn | 不符合字元集長度 | size_t strcspn(const char *s, const char *reject); | 從開頭計算連續不屬於 reject 的字元數 |
strpbrk | 尋找任一字元集字元 | char *strpbrk(const char *s, const char *accept); | 回傳首次出現任一 accept 字元位址 |
strtok | 字串切割 | char *strtok(char *s, const char *delim); | 破壞原字串,非執行緒安全 |
memcpy | 記憶體複製 | void *memcpy(void *dest, const void *src, size_t n); | 不處理重疊區域 |
memmove | 記憶體移動 | void *memmove(void *dest, const void *src, size_t n); | 正確處理重疊區域 |
memset | 記憶體設定 | void *memset(void *s, int c, size_t n); | 逐位元組填充 |
memcmp | 記憶體比較 | int memcmp(const void *s1, const void *s2, size_t n); | 逐位元組比較 |
strcpy/strcat 不檢查邊界,優先使用 strncpy/strncat 或 snprintf。strncpy 不保證以 \0 結尾,複製後請手動加 dest[n-1] = '\0'。strtok 會修改原字串且非執行緒安全,多執行緒環境請用 strtok_r 或 C++ std::stringstream。strcasecmp(POSIX)或 _stricmp(Windows)。現代 C++ 專案優先使用 std::string 與 std::string_view,僅在與 C API 介接或極度效能敏感區域使用 C 風格字串函數。