您好,我正在尝试创建自己的 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;
}
最佳答案
Hello i am trying to make my own strstr()
首先你必须遵循C标准。
C89/C99 原型(prototype)是:
char *strstr(const char *s1, const char *s2);
标准strstr()
函数不会更改传递的缓冲区。
功能描述如下:
strstr()
函数在 s1
指向的字符串中查找字符序列(不包括终止空字符)在 s1
指向的字符串中第一次出现的位置s2。
strstr
函数返回指向所定位字符串的指针,如果未找到该字符串,则返回空指针。如果s2
指向长度为零的字符串,则该函数返回s1
。
在标准 C 中,这可以实现为:
#include <string.h> /* size_t memcmp() strlen() */
char *strstr(const char *s1, const char *s2)
{
size_t n = strlen(s2);
while(*s1)
if(!memcmp(s1++,s2,n))
return (char *) (s1-1);
return 0;
}
独立实现如下:
#include <stdio.h>
char *strstr1(const char *str, const char *substring)
{
const char *a;
const char *b;
b = substring;
if (*b == 0) {
return (char *) str;
}
for ( ; *str != 0; str += 1) {
if (*str != *b) {
continue;
}
a = str;
while (1) {
if (*b == 0) {
return (char *) str;
}
if (*a++ != *b++) {
break;
}
}
b = substring;
}
return NULL;
}
int main (void)
{
char string[64] ="This is a test string for testing strstr";
char *p;
p = strstr1 (string,"test");
if(p)
{
printf("String found:\n" );
printf ("First occurrence of string \"test\" in \"%s\" is:\n%s", string, p);
}
else
{
printf("String not found!\n" );
}
return 0;
}
输出:
String found:
First occurrence of string "test" in "This is a test string for testing strstr" is:
test string for testing strstr
关于c - 重新创建 strstr() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49131175/