好的优化网站推广公司东莞网站制作培训
2026/4/7 21:49:00 网站建设 项目流程
好的优化网站推广公司,东莞网站制作培训,上海环球金融中心简介,安徽省建设行业安全协会网站strstr() 是 C 标准库中用于字符串查找的核心函数#xff0c;作用是在一个字符串#xff08;主串#xff09;中查找另一个字符串#xff08;子串#xff09;的首次出现位置#xff0c;返回指向该位置的指针#xff1b;若未找到则返回 NULL。一、核心定义1. 函数原型与头…strstr()是 C 标准库中用于字符串查找的核心函数作用是在一个字符串主串中查找另一个字符串子串的首次出现位置返回指向该位置的指针若未找到则返回NULL。一、核心定义1. 函数原型与头文件#include string.h // 必须包含的头文件 char *strstr(const char *haystack, const char *needle);参数haystack待查找的主字符串被搜索的字符串字面意思 “干草堆”needle要查找的子字符串字面意思 “针”返回值找到返回指向haystack中needle首次出现的起始位置的指针未找到返回NULL特殊情况若needle是空字符串则返回haystack本身标准规定。2. 核心特性匹配是大小写敏感的如abc无法匹配ABC匹配的是连续字符序列不支持正则表达式不修改原字符串参数用const修饰。二、基础用法示例1. 基本查找找到子串#include stdio.h #include string.h int main() { const char *main_str Hello, world! This is a test.; const char *sub_str world; // 查找子串 char *result strstr(main_str, sub_str); if (result ! NULL) { // 输出匹配结果找到的子串内容 printf(找到子串%s\n, result); // 计算子串在主串中的偏移位置 int pos result - main_str; printf(子串起始位置第 %d 个字符从0开始\n, pos); } else { printf(未找到子串\n); } return 0; }输出结果找到子串world! This is a test. 子串起始位置第 7 个字符从0开始2. 未找到子串的情况#include stdio.h #include string.h int main() { const char *main_str Hello, C language!; const char *sub_str Python; char *result strstr(main_str, sub_str); if (result NULL) { printf(未找到子串 \%s\\n, sub_str); } return 0; }输出结果未找到子串 Python3. 查找空字符串特殊情况#include stdio.h #include string.h int main() { const char *main_str Test string; char *result strstr(main_str, ); // 子串为空 if (result main_str) { printf(空字符串匹配成功返回主串首地址%p\n, result); } return 0; }三、进阶用法1. 查找所有匹配的子串通过循环调用strstr()每次从上次匹配位置的下一个字符开始查找#include stdio.h #include string.h int main() { char main_str[] abababab; // 注意不能用 const否则后续指针操作会报错 const char *sub_str ab; char *pos main_str; int count 0; while ((pos strstr(pos, sub_str)) ! NULL) { count; printf(第 %d 次匹配位置%ld\n, count, pos - main_str); pos strlen(sub_str); // 跳过当前匹配的子串避免重复匹配 } printf(总匹配次数%d\n, count); return 0; }输出结果第 1 次匹配位置0 第 2 次匹配位置2 第 3 次匹配位置4 第 4 次匹配位置6 总匹配次数4四、注意事项避坑重点1. 空指针与空字符串若传入haystack或needle为NULL行为未定义可能崩溃需提前校验。// 安全校验示例 char *safe_strstr(const char *h, const char *n) { if (h NULL || n NULL) return NULL; return strstr(h, n); }若needle为空字符串严格按标准应返回haystack但部分老旧编译器可能行为异常需注意兼容。2. 原字符串不可修改的情况若haystack是字符串常量如const char *s abc返回的指针仅可读不可写若需修改匹配位置的内容需先将字符串拷贝到可写内存如字符数组。3. 重叠字符串匹配strstr()不处理 “重叠匹配”如主串aaaa查找aa默认只匹配 0、2 位置而非 0、1、2 位置若需重叠匹配需手动调整每次查找的偏移量仅pos 1而非pos strlen(needle)。4. 宽字符版本若处理宽字符串wchar_t需使用wcsstr()函数头文件仍为string.h或wchar.h#include stdio.h #include wchar.h #include locale.h // 设置本地化支持宽字符输出 int main() { setlocale(LC_ALL, zh_CN.UTF-8); // 必须设置否则宽字符输出乱码 const wchar_t *main_wstr L你好世界世界很美好; const wchar_t *sub_wstr L世界; wchar_t *result wcsstr(main_wstr, sub_wstr); if (result ! NULL) { wprintf(L找到宽字符子串%ls\n, result); } return 0; }五、总结特性说明核心功能在主串中查找子串首次出现的位置返回值匹配位置指针 / NULL未找到大小写敏感需自定义实现忽略大小写的版本特殊情况空子串返回主串首地址宽字符版本wcsstr()处理wchar_t字符串

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询