这个为什么会出现段错误?

1 //25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
2 #include
3 #include
4 #define SIZE 100
5 char compare_string_len(char *str1,char *str2,int size)
6 {
7 printf("please two string:\n");
8 scanf("%s",&str1,&str2);
9 if(strlen(str1)>=strlen(str2))
10 {
11 return *str1;
12 }
13 else
14 {
15 return str2;
16 }
17 /
while(*m)
18 {
19 i++;
20 *m++;
21 }
22 while(*n)
23 {
24 j++;
25 *n++;
26 }
27 if(i>=j)
28 {
29 m=str1;
30 }
31 if(i 32 {
33 m=str2;
34 }
35 return *m;
36 */
37 }
38 int main(void)
39 {
40 char str1[SIZE],str2[SIZE];
41 compare_string_len(str1,str2,SIZE);
42 printf("%s\n",str1,str2);
43
44 }

scanf("%s",&str1,&str2);
改成
scanf("%s", str1);
scanf("%s", str2);
scanf后面填的是接受输入的变量地址,str1和str2就是指针了,不需要&


#include<stdio.h>
#include <stdlib.h>
char* compare_string_len(char* s1, char* s2)
{
  int i;
  char* p;
  for (i = 0;; i++)
  {
    if (s1[i] == NULL && s2[i] == NULL)
    {
      p =  s1;
      break;
    }
    if (s1[i] == NULL)
    {
      p =  s2;
      break;
    }
    if (s2[i] == NULL)
    {
      p = s1;
      break;
    }
  }
  return p;
}
int main() {
  char s1[] = "123";
  char s2[] = "abcd";
  char* p;
  p = compare_string_len(s1, s2);
  printf("%s", p);

}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^