关于在vs上运行的出现的问题!(标签-ar|关键词-字符串)

 #include <stdio.h>
  #include <string.h>
  void  main()
  {
      char s1[100];
      char s2[100];
      int a;
      int strcmp(char* p1, char* p2);
      printf("输入字符串s1:");
      scanf_s("%s",s1);
      printf("输入字符串s1:");
      scanf_s("%s", s2);
      a=strcmp(s1,s2);
      printf("%d",a);
  }
  int  strcmp(char* p1, char* p2)
  {
      int i = 0;
      int c,l;
      //下面是找出两个字符串中较短的长度,避免出现字母与“/0“比较的情况
      l  = strlen(p1) >  strlen(p2) ?  strlen(p2) :  strlen(p1);
      while (*(p1 + i) == *(p2 +  i)&&i<l)
      {
           i++;
      }
      if (i < l - 1)
      {
           c  = *(p1 + i)  - *(p2 + i);
           return c;
      }
      else if (i = l - 1)
           return 0;
  }

一运行程序输入字符按下Enter键后就跳转这个页面报错,程序无法运行下去,但编译那边没有报错。

img

  1. scanf_s 里面都少了取值符, &
  2. 不能这样给字符串赋值,可以直接gets(s1)

img

望采纳,谢谢!

你想,当p1=p2='a';
21行的l =1;
i=1;
然后你的if 和esle if程序都没有进入,就没有返回了

最主要的问题在于,在int strcmp(char* p1, char* p2)的最后补一个 return 0;
也就是不满足两种条件时,也需要有返回值

另外,main函数中的 scanf_s 里面掉了 & ,是这样的形式:scanf_s("%s",&s1);


int strcmp(char* p1, char* p2)
  {
      int i = 0;
      int c,l;
      //下面是找出两个字符串中较短的长度,避免出现字母与“/0“比较的情况
      l  = strlen(p1) >  strlen(p2) ?  strlen(p2) :  strlen(p1);
      while (*(p1 + i) == *(p2 +  i) && i<l)
      {
           i++;
      }
      if (i < l - 1)
      {
           c  = *(p1 + i)  - *(p2 + i);
           return c;
      }
      else if (i = l - 1)
           return 0;
    
        return 0;
  }