1.函数简介
该函数包含在头文件<string.h>中,是一个查找子字符串的函数,用于找到子串(str2)在一个字符串(str1)中第一次出现的位置(不包括str2的串结束符),并返回该位置的指针,如果找不到,返回空指针(NULL)。
函数原型:
参数为两个字符指针类型,返回值为char * 类型
2.函数使用
2.1使用strstr函数查找目标字符串,并修改目标字符串的值
//2.1使用strstr函数查找目标字符串,并修改目标字符串的值
int main()
{
char arr1[] = "abcdefghi";
char* remain;
remain = strstr(arr1, "defg"); //先找出defg的地址
if (remain != NULL)
strncpy(remain, "abcd", 4); //使用abcd将defg覆盖
printf("%s", arr1); //结果为abcabcdhi
return 0;
}
2.2查找子字符成功,strncp的长度修改,引起结果不同
//2.2查找子字符成功,strncp的长度修改,引起结果不同
int main()
{
char arr1[] = "abcdefghi";
char* remain;
remain = strstr(arr1, "defg"); //先找出defg的地址
if (remain != NULL)
strncpy(remain, "abcd", 5); //使用abcd将defg覆盖
printf("%s", arr1); //结果为abcabcd
return 0;
}
这是因为,strncpy函数会将参数2(abcd)前n(在该代码中是5)个字符拷贝到参数1(remain)中,如果参数2字符串的长度小于n时,其余部分用空字节填充,直到n个
3.函数实现
首先先讲解一下该函数的原理:
图片来源:函数原理
//3.函数实现
char* my_strncpy(const char* pa, const char* pb)
{
//首先先排除空指针
assert(pa && pb);
const char* s1 = pa;
const char* s2 = pb;
const char* p = pa;
while(*p)
{
s1 = p;
while (s1 && s2 && *s1 == *s2)
{
s1++;
s2++;
}
if (s2 == '\0')
return (char*)p;
p++;
}
return NULL;
}
int main()
{
char arr1[] = "abcdefghi";
char* remain;
remain = strstr(arr1, "defg");
printf("%s", remain);
return 0;
}