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