簡體   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