strstr
函数
strstr
函数的学习
strstr
是一个在 C 语言标准库 <string.h>
中的函数,用于在一个字符串中查找另一个字符串的首次出现。如果找到,它返回一个指向首次出现位置的指针;如果没有找到,它返回 NULL
。
函数原型
char *strstr(const char *haystack, const char *needle);
返回值
- 如果
needle
在haystack
中找到,则函数返回一个指向haystack
中needle
首次出现的位置的指针。 - 如果
needle
没有在haystack
中找到,则返回NULL
。
参考代码
#include <stdio.h>
#include <string.h>
int main() {
const char *haystack = "Hello, welcome to the world of strings!";
const char *needle = "welcome";
const char *result = strstr(haystack, needle);
if (result) {
printf("'%s' found in '%s'\n", needle, haystack);
printf("First occurrence at: %s\n", result);
} else {
printf("'%s' not found in '%s'\n", needle, haystack);
}
return 0;
}
注意事项
strstr
是区分大小写的,所以 “Welcome” 和 “welcome” 会被视为不同的字符串。- 如果
needle
是一个空字符串(“”),则strstr
会返回 haystack 的起始地址。 - 在处理
strstr
的返回值时,务必进行空指针检查,以避免解引用空指针导致的未定义行为。 - 由于
strstr
返回的是指向静态存储区的指针,因此不需要(也不应该)尝试释放这个指针。
strstr
函数的模拟实现
参考代码
#include <stdio.h>
#include <assert.h>
char *my_strstr(const char *str1, const char *str2) {
assert(str1 != NULL);
assert(str2 != NULL);
if (*str2 == '\0') {
return (char *) str1;
}
const char *s1 = NULL;
const char *s2 = NULL;
const char *s3 = str1;
while (*s3) {
s1 = s3;
s2 = str2;
while (*s1 != '\0' && *s1 == *s2 && *s2 != '\0') {
s1++;
s2++;
}
if (*s2 == '\0') {
return (char *) s3;
}
if (*s1 == '\0') {
return NULL;
}
s3++;
}
return NULL;
}
int main() {
char arr1[30] = {0};
char arr2[30] = {0};
printf("please input:\n");
scanf_s("%29s", arr1, (unsigned) sizeof(arr1));
scanf_s("%29s", arr2, (unsigned) sizeof(arr2));
char *ret = my_strstr(arr1, arr2);
if (ret == NULL) {
printf("找不到\n");
} else {
printf("%s\n", ret);
}
return 0;
}