C 標準庫 `
sprintf / snprintf (C99 安全版)int sprintf(char *buf, const char *fmt, ...);
int snprintf(char *buf, size_t n, const char *fmt, ...); // 防止緩衝區溢出
char result[100];
sprintf(result, "File_%03d.log", 42); // "File_042.log"
snprintf(result, sizeof(result), "%s_%d", "user", 100);
strlensize_t strlen(const char *s); // 不包含結尾 \0
// 注意:若 s 非合法字串 (缺 \0) 會導致未定義行為
strcpy / strncpy / strcpy_s (C11 Annex K)| 函數 | 行為 | 風險 |
|---|---|---|
strcpy(dst, src) | 複製含 \0 直到結束 | dst 空間不足導致溢出 |
strncpy(dst, src, n) | 複製前 n 字元;src < n 時補 \0;src ≥ n 時 **不自動加 \0** | 需手動 `dst[n-1]=0` 確保結尾 |
strcpy_s(dst, dstsz, src) | 安全版,檢查空間,失敗返回錯誤碼 | 需編譯器支援 C11 Annex K (MSVC 支援) |
strcat / strncatchar path[260] = "C:\\Data\\";
strcat(path, "file.txt"); // "C:\\Data\\file.txt"
strncat(path, ".bak", 4); // 追加前 4 字元
strcmp / strncmp / stricmp (大小寫不敏感) / strnicmpint cmp = strcmp("abc", "abd"); // < 0 (abc < abd)
int cmp = stricmp("ABC", "abc"); // 0 (忽略大小寫相等)
回傳值:< 0 (s1
strstrchar *p = strstr("hello world", "world"); // 返回指向 "world" 的指標
if (p) printf("Found at offset %ld\n", p - "hello world");
strchr / strrchr (反向)char *p = strchr("hello", 'l'); // 指向第一個 'l'
char *p = strrchr("hello", 'l'); // 指向最後一個 'l'
strtok / strtok_s (執行緒安全)char str[] = "a,b,c;d";
char *token = strtok(str, ",;"); // 第一次傳字串
while (token) {
printf("%s\n", token);
token = strtok(NULL, ",;"); // 後續傳 NULL
}
// 注意:strtok 會修改原字串 (插入 \0),且非執行緒安全
strlwr / strupr (Microsoft 擴展,非標準)char s[] = "Hello";
strlwr(s); // "hello"
strupr(s); // "HELLO"
// 跨平台建議自行實作或用 towlower/towupper 逐字元轉換
strncpy **不保證以 \0 結尾**,使用後務必 `dst[n-1] = '\0'`。strtok 破壞原字串且不可重入,多執行緒環境必須用 `strtok_s` / `strtok_r`。