/*********************************************
* @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