【发布时间】:2018-08-14 07:56:40
【问题描述】:
您好,我正在尝试创建自己的 strstr() 函数,但我不知道为什么它会返回分段错误。我正在尝试在另一个字符串中搜索一个字符串,然后返回一个指向第一个“相同”的指针' 信件。任何帮助,将不胜感激。
这是我的代码:
char* ms_search(char *Str1,char* Str2){
char* p = NULL;
int i,k=0,j = 0;
for(i = 0;i < ms_length(Str1); i++){
if(Str1[i] == Str2[k]){
if(k == 0){
p = &Str1[i];
j= i;
}
if(k == ms_length(Str2)){
break;
}
k++;
}
else{
if(Str1[i] == Str2[0]){
p = &Str1[i];
k=1;
j= i;
}
else{
j=0;
k = 0;
p = NULL;
}
}
}
if(p != NULL){
Str1[ms_length(Str2)+1] = '\0';
}
return &Str1[j];
}
int main(){
int i;
char* p2;
char* p="lolaaa";
char* p1= "aaa";
//char ar2[] = "aaa4";
//ms_copy(p,p1);
//printf("%s",p);
//ms_nconcat(p,p1,3);
//if(ms_ncompare(p,p1,3) == 1) printf("einai idia");
p2 = ms_search(p,p1);
printf("%s",p2);
return 0;
}
【问题讨论】:
-
当您在调试器中运行它并单步执行时会发生什么?当您在调试器中加载核心文件并检查堆栈跟踪和变量时,您会看到什么?
-
原始
strstr()函数不会更改传递的缓冲区。尝试修改字符串文字会调用 未定义的行为。请描述你想做什么。 -
@Μιχάλης 函数太复杂了。与任何复杂的功能一样,它都有错误。:)
-
@Μιχάλης 您也不能更改字符串文字。
-
strstr()使用签名char *strstr(const char *s1, const char *s2);。我建议您的代码也这样做。