#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键后就跳转这个页面报错,程序无法运行下去,但编译那边没有报错。
望采纳,谢谢!
你想,当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;
}