目录
# strstr的模拟实现
?# strstr分析
??# strstr模拟实现
# strstr的模拟实现
? ? ? ??
?# strstr分析
? ? ? ? 这个函数不能实现自己给自己追加的原因在于;两个指针同时操作一个字符串,当*dest找到 '\0' 之后,*src开始追加,当追加完一个字符后,*src往后走一位,*dest指向的 '\0'被覆盖,*dest就必须往后走一位,找到下一个'\0',找到之后*src又开始追加,不断重复,导致程序崩溃。
?
??# strstr模拟实现
? ? ? ? 函数的问题出在两个指针操作同一字符,那我们可以加一个判断,先比较两个字符串是否相同,相同的话使用malloc动态申请一个大小和src一样的空间用于存放字符串,之后再进行追加就不会出现这样的问题。(这样其实是把自己给自己追加和将两个相同的字符串追加的情况合在了一块,大家要是有其他更好的想法,欢迎评论区讨论学习)
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
char *my_strcat(char *Des, const char *Sou)
{
assert(Des != NULL && Sou != NULL);
char* str1 = Des;
const char* str2 = Des;
if (strcmp(Des, Sou) == 0)
{
int length = strlen(str1);
char *copy=(char*)malloc(sizeof(str1));
copy[length];
strcpy(copy, Des);
while (*str1 != '\0')
{
str1++;
}
int i = 0;
while (copy[i] != '\0')
{
*str1++ = copy[i];
++i;
}
*str1 = '\0';
return Des;
}
while (*str1!= '\0')
{
str1++;
}
while (*str2 != '\0')
{
*str1++ = *str2++;
}
*str1 = '\0';
return Des;
}
int main()
{
char s[123] = "safrrrrrrrrr";
char* s1 = "dada";
my_strcat(s, s);
printf("%s", s);
return 0;
}
? ? ??
|