国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > strstr 以获得更好的体验。

# C 语言标准库函数 strstr

在头文件 string.h 中定义。
/*********************************************
 * @brief 在字符串中查找子字符串
 * @param str 被检索的字符串
 * @param substr 要查找的子串
 * @return 指向找到的字串的指针
 ********************************************/
char* strstr(const char* str, const char* substr);

!subtitle:说明

在字符串 str 中查找子字符串 substr,返回找到的第一个子字符串 substr 的地址。

!subtitle:参数

  • str - 被检索的字符串

  • substr - 要查找的子字符串

!subtitle:返回值

  • 指向找到的子字符串的指针

  • 如果没有找到目标子字符串,则返回 NULL

# 示例

#include <stdio.h>
#include <string.h>

int main(void)
{
    const char* text = "一袋米要抗几楼(感受痛苦吧),一袋米要抗二楼(思考痛苦吧),一袋米要给多了(接受痛苦吧),一袋米我洗嘞(理解痛苦吧)。";
    const char* substr = "一袋米";

    const char* str = text;
    while ((str = strstr(str, substr)) != NULL) // 循环查找 "一袋米"
    {
        printf("地址:%p 偏移:%td 剩余字符串:\"%s\"\n", str, str - text, str + strlen(substr));
        str += strlen(substr);
    }

    return 0;
}

说明:

通过 strstr 循环查找子字符串 "一袋米" 直到返回 NULL

运行结果:

地址:0x5cdf19f8e008 偏移:0 剩余字符串:"要抗几楼(感受痛苦吧),一袋米要抗二楼(思考痛苦吧),一袋米要给多了(接受痛苦吧),一袋米我洗嘞(理解痛苦吧)。"
地址:0x5cdf19f8e035 偏移:45 剩余字符串:"要抗二楼(思考痛苦吧),一袋米要给多了(接受痛苦吧),一袋米我洗嘞(理解痛苦吧)。"
地址:0x5cdf19f8e062 偏移:90 剩余字符串:"要给多了(接受痛苦吧),一袋米我洗嘞(理解痛苦吧)。"
地址:0x5cdf19f8e08f 偏移:135 剩余字符串:"我洗嘞(理解痛苦吧)。"

# 推荐阅读

# 参考标准

  • C23 standard (ISO/IEC 9899:2024):

    • 7.24.5.7 The strstr function (p: TBD)

  • C17 standard (ISO/IEC 9899:2018):

    • 7.24.5.7 The strstr function (p: 269)

  • C11 standard (ISO/IEC 9899:2011):

    • 7.24.5.7 The strstr function (p: 369)

  • C99 standard (ISO/IEC 9899:1999):

    • 7.21.5.7 The strstr function (p: 332)

  • C89/C90 standard (ISO/IEC 9899:1990):

    • 4.11.5.7 The strstr function

本文 更新于: 2025-11-27 09:38:10 创建于: 2025-11-27 09:38:10