繁体   English   中英

返回char *时的分段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM