strchr 是一个非常重要的字符串处理函数,它的名字来源于 "string character"(字符串字符)。

(图片来源网络,侵删)
函数原型
strchr 函数在 C 语言标准头文件 <string.h> 中声明,其原型如下:
char *strchr(const char *str, int c);
功能描述
strchr 函数用于在字符串 str 中搜索第一次出现字符 c 的位置。
- 搜索方向:从字符串的开头(
str[0])向结尾('\0')搜索。 - 返回值:
- 如果找到字符
c,函数返回一个指向该字符在字符串str中首次出现位置的指针。 - 如果没有找到字符
c,函数返回NULL(空指针)。
- 如果找到字符
参数详解
-
const char *str:str是指向一个以空字符'\0'结尾的字符串的指针。const关键字表示strchr函数不会修改这个字符串的内容,这是一个很好的编程实践,确保原始字符串不被意外改变。
-
int c:c是你想要查找的字符。- 虽然类型是
int,但通常我们只使用它的低8位(即一个char的值),你可以直接传入一个char类型的字面量,'a'或'\n'。 - 一个特殊情况是,
c可以是'\0'(空字符)。strchr也会查找字符串末尾的空字符。
返回值详解
- 找到字符时:返回的指针指向字符串中的一个字符,这个指针可以用于后续操作,比如打印从该位置开始的所有字符,或者计算字符在字符串中的索引。
- 未找到字符时:返回
NULL,在 C 语言中,使用指针前必须检查它是否为NULL,否则会导致未定义行为,通常是程序崩溃(段错误)。
使用示例
下面通过几个例子来理解 strchr 的用法。
示例 1:查找普通字符
#include <stdio.h>
#include <string.h>
int main() {
const char *text = "Hello, World!";
char ch = 'W';
char *result;
// 在 text 中查找字符 'W'
result = strchr(text, ch);
if (result != NULL) {
// 找到了!result 指向 'W'
printf("字符 '%c' 找到了,\n", ch);
printf("它在字符串中的位置是: %ld\n", result - text); // 指针相减得到索引
printf("从该位置开始的子字符串是: \"%s\"\n", result);
} else {
// 没找到
printf("字符 '%c' 没有找到,\n", ch);
}
return 0;
}
输出:
字符 'W' 找到了。
它在字符串中的位置是: 7
从该位置开始的子字符串是: "World!"
示例 2:查找不存在的字符
#include <stdio.h>
#include <string.h>
int main() {
const char *text = "Hello, World!";
char ch = 'z';
char *result;
result = strchr(text, ch);
if (result != NULL) {
printf("字符 '%c' 找到了,\n", ch);
} else {
printf("字符 '%c' 没有找到,\n", ch);
}
return 0;
}
输出:
字符 'z' 没有找到。
示例 3:查找空字符 '\0'
strchr 也可以用来查找字符串的结尾。
#include <stdio.h>
#include <string.h>
int main() {
const char *text = "Hello";
char *result;
// 查找字符串的结束符 '\0'
result = strchr(text, '\0');
if (result != NULL) {
// result 指向 'H' 之后第 5 个位置,即 '\0'
printf("找到了字符串的结束符 '\\0',\n");
printf("结束符的位置是: %ld\n", result - text); // 结果是字符串的长度
}
return 0;
}
输出:
找到了字符串的结束符 '\0'。
结束符的位置是: 5
strchr vs. strrchr
这是一个常见的混淆点。strchr 查找第一次出现,而 strrchr(reverse strchr)查找最后一次出现。
char *strchr(const char *str, int c);// 从前往后找char *strrchr(const char *str, int c);// 从后往前找
示例:
#include <stdio.h>
#include <string.h>
int main() {
const char *text = "banana";
char ch = 'a';
char *first_pos = strchr(text, ch);
char *last_pos = strrchr(text, ch);
printf("字符串: \"%s\"\n", text);
printf("字符 '%c' 第一次出现的位置: %ld\n", ch, first_pos - text);
printf("字符 '%c' 最后一次出现的位置: %ld\n", ch, last_pos - text);
return 0;
}
输出:
字符串: "banana"
字符 'a' 第一次出现的位置: 1
字符 'a' 最后一次出现的位置: 5
| 特性 | 描述 |
|---|---|
| 函数名 | strchr |
| 头文件 | <string.h> |
| 功能 | 在字符串中查找指定字符的首次出现位置。 |
| 参数 | const char *str: 要搜索的字符串。int c: 要查找的字符。 |
| 返回值 | 成功: 返回指向该字符的指针。 失败: 返回 NULL。 |
| 关键点 | 必须检查返回值是否为 NULL,否则解引用空指针会导致程序崩溃。搜索范围包括字符串末尾的空字符 '\0'。返回的指针可以用于计算索引或获取子字符串。 |
