#include <string.h>
char *strchr(const char *str, int c);
int 傳入,內部轉為 unsigned char 比較)。c 位置的指標;若未找到,回傳 NULL。'\0',會回傳指向字串結尾的指標。'A' 與 'a' 視為不同字符。#include <stdio.h>
#include <string.h>
int main() {
const char *str = "GoldenGlobalView";
char *ptr;
// 1. 查找存在的字符 'V'
ptr = strchr(str, 'V');
if (ptr != NULL) {
printf("找到 'V',位置索引: %ld,剩餘字串: %s\n", ptr - str, ptr);
// 輸出: 位置索引: 13,剩餘字串: View
} else {
printf("未找到 'V'\n");
}
// 2. 查找不存在的字符 'Z'
ptr = strchr(str, 'Z');
if (ptr == NULL) {
printf("未找到 'Z',ptr 為 NULL\n");
}
// 3. 查找結尾空字元
ptr = strchr(str, '\0');
printf("字串結尾位置索引: %ld (長度: %zu)\n", ptr - str, strlen(str));
return 0;
}
strchr 常用於尋找分隔符 (如 ':', ',', '=') 以切割字串。
// 解析 "key=value" 格式
char data[] = "username=admin";
char *sep = strchr(data, '=');
if (sep) {
*sep = '\0'; // 將 '=' 替換為字串結尾,分割成兩個字串
printf("Key: %s\n", data); // 輸出: username
printf("Value: %s\n", sep + 1); // 輸出: admin
}
直接解參考回傳指標 printf("%s", strchr(s, 'x')); 若未找到會導致段錯誤。永遠先檢查是否為 NULL。
若 const char *s = "abc";,不可透過 strchr 回傳的指標修改內容 (如 *ptr = 'X'),會導致未定義行為。需使用字元陣列 char s[] = "abc";。
strchr:由左至右找第一次出現。strrchr:由右至左找最後一次出現 (反向搜尋)。char *strchr(const char *s, int c) {
do {
if (*s == (char)c) return (char *)s;
} while (*s++); // 檢查完當前字符後移動,包含 '\0' 的檢查
return NULL;
}
理解此邏輯有助於掌握為何能搜尋 '\0' 以及指標遞增的時機。