c语言strchr p c

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 C语言 正文

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

c语言strchr p c
(图片来源网络,侵删)

函数原型

strchr 函数在 C 语言标准头文件 <string.h> 中声明,其原型如下:

char *strchr(const char *str, int c);

功能描述

strchr 函数用于在字符串 str 中搜索第一次出现字符 c 的位置。

  • 搜索方向:从字符串的开头(str[0])向结尾('\0')搜索。
  • 返回值
    • 如果找到字符 c,函数返回一个指向该字符在字符串 str首次出现位置指针
    • 如果没有找到字符 c,函数返回 NULL(空指针)。

参数详解

  1. const char *str:

    • str 是指向一个以空字符 '\0' 结尾的字符串的指针。
    • const 关键字表示 strchr 函数不会修改这个字符串的内容,这是一个很好的编程实践,确保原始字符串不被意外改变。
  2. 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'
返回的指针可以用于计算索引或获取子字符串。
-- 展开阅读全文 --
头像
织梦后台登录模板下载,安全吗?
« 上一篇 02-28
单独调取织梦帅选文章
下一篇 » 02-28

相关文章

取消
微信二维码
支付宝二维码

目录[+]