返回char时的分段错误*

时间:2016-09-06 06:50:04

标签: c pointers

遇到行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);
}

2 个答案:

答案 0 :(得分:4)

如果你的意图是在另一个字符串中找到一个字符串,你应该只查看标准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

并逐行运行该代码,随时更新变更变量。

没有什么比手动单步执行代码更清楚了。

答案 1 :(得分:0)

一切正常。毕竟,它与指针无关,我的不好,抱歉。问题是我实际上有两个单独的文件(main.cpp和ft_strstr.c)。即使未在main.cpp文件中声明ft_strstr()的原型,在使用gcc main.cpp ft_strstr.c进行编译时,链接器也没有引发任何错误,而且当我运行已编译的可执行文件时,它似乎是导致分段错误。奇怪的是,该功能正在执行(我知道,因为我试图从ft_strstr()制作一些打印件。)