【发布时间】:2016-06-27 23:53:48
【问题描述】:
我试图实现 strstr(str, substr) 函数。我尝试以两种方式实施, 我的主要是这样的
*#include<stdio.h>
char * my_strstr(char * str, char * substr);
int main()
{
char str[10], substr[10];
char *ptr;
printf("Enter the 1st string\n");
fgets(str, 10, stdin);
printf("Enter the sub string\n");
fgets(substr, 10, stdin);
printf("I'm here beofre funcall\n");
ptr = my_strstr(str, substr);
printf("%p %s", ptr, *ptr);
return 0;
}
一种方法是在 my_strstr(str, str) 函数中将数组作为数组本身接收
char * my_strstr(char str[], char substr[])
{
int i, j, k=0, flag=0;
char *pt = (char *)str;
for(i=0; str[i] != '\0' && substr[i] != '\0'; i++)
{
if(str[i] == substr[0])
{
printf("I'm for1 %c \n", str[i]);
for(j=i; (str[j] != '\0' && substr[k] != '\0'); j++)
{
if(substr[k] == str[i+k])
flag = 1;
else
flag = 0;
k++;
printf("flag = %d \n", flag);
}
}
pt++;
}
if(flag == 1)
return pt;
else
return 0;
}
第二种方式是接收数组作为指针
char * my_strstr(char * str, char * substr)
{
while(*str)
{
char * begin = str;
char * pattern = substr;
while(*str && *pattern && *str == *pattern)
{
str++;
pattern++;
}
if(!*pattern)
return begin;
str = begin + 1;
}
return 0;
}
测试用例:
Enter the 1st string
Amarstar
Enter the sub string
star
双向输出:
Segmentation fault (core dumped)
请帮我解决分段错误。
【问题讨论】:
-
在调试器下运行代码beej.us/guide/bggdb
-
总是用
gcc -Wall -Wextra -Werror ...编译。然后用gdb运行你的程序。 -
我调试了@Jonathon,返回地址时正在转储内核。
-
你试过 cppcheck 了吗?该工具能够读取您的源代码并检测潜在的错误。另一个有用的工具可能是 valgrind。祝你好运!
-
感谢您的提示@orbitcowboy,我开始使用 cppcheck。
标签: c string segmentation-fault strstr