【发布时间】:2021-10-21 04:22:57
【问题描述】:
我正在尝试重现 strstr() 函数的行为,该函数试图在字符串中查找子字符串,为此我创建了以下函数并将其与原始函数进行比较。我在纸上进行了所有迭代以了解函数中发生了什么,但我不明白为什么命令return (&str[i]); 打印ab 而不仅仅是a。当函数进入if (to_find[j] == '\0')时,i和j的值分别是2和2,所以它应该只打印&str[2],也就是a。为什么打印ab 而不仅仅是a?
#include <stdio.h>
#include <unistd.h>
#include <string.h>
char *ft_strstr(char *str, char *to_find)
{
int i;
int j;
i = 0;
if (*to_find == '\0')
return (str);
while (str[i] != '\0')
{
j = 0;
while (str[i + j] == to_find[j])
{
//printf("%d", i);
//printf("%d\n", j);
j++;
if (to_find[j] == '\0')
return (&str[i]);
}
i++;
}
return (0);
}
int main()
{
char i[] = "ab";
char dest[] = "a ab";
printf("%s", ft_strstr(dest, i));
//printf("%s", strstr(dest, i));
}
【问题讨论】:
-
printf 打印直到为
"%s"建立一个'0也许你只想用"%c"打印一个字符 -
该函数返回
char *而不是char。因此,printf会将其视为以空字符结尾的字符串 -
我建议你在一张纸上画一个矩形,然后把它分成四个子矩形。在每个子矩形中填写字符串
dest的字母。为第一个字母画一个箭头并标记该箭头str。现在在第三个字母上绘制第二个箭头并将其标记为&str[2]。两个箭头中的每一个都代表ft_strstr函数中的重要指针,它们中的每一个都是指向以空字符结尾的字符序列的指针,也就是字符串。
标签: c c-strings function-definition strstr