[英]Segmentation fault when returning char*
当该行return str + i - j;
时,为什么该程序会导致分段错误return str + i - j;
遇到? 我以为我对指针概念了解得很好,但是我显然在这里错过了一些东西,我无法弄清楚。
#include <stdio.h>
char* ft_strstr(char* str, char* to_find)
{
int i;
int j;
i = 0;
while (str[i] != '\0')
{
j = 0;
while (str[i] == to_find[j] && str[i] != '\0' && to_find[j] != '\0')
{
i++;
j++;
}
if (to_find[j] == '\0')
return str + i - j;
else
i = i - j;
i++;
}
return (0);
}
int main()
{
char a[] = "fffo";
char b[] = "ffo";
char* f = ft_strstr(a,b);
if (f)
printf("%s\n", f);
return (0);
}
如果您的目的是在另一个字符串中找到一个字符串,则应该简单地查看标准的strstr
函数,因为这正是它的含义。
但是,如果您的目的是学习如何调试代码,那么最好的选择是坐在一张纸上,这样:
i j str to_find
----- ----- -------------- ------------
0 1 2 3 4 0 1 2 3 <- indexes
? ? f f f o \0 f f o \0
并逐行运行该代码,并随时更新变化的变量。
没有什么比手动单步执行代码更清楚了。
一切正常。 毕竟,这与指针无关,不好意思,抱歉。 问题是我实际上有2个单独的文件(main.cpp和ft_strstr.c)。 即使未在main.cpp文件中声明ft_strstr()
的原型,使用gcc main.cpp ft_strstr.c
进行编译时,链接程序也不会引发任何错误,并且当我运行已编译的可执行文件时,结果是细分错误。 不过,奇怪的是函数正在执行(我知道,因为我试图从ft_strstr()
进行打印)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.