比较字符串函数问题,萌新求教
#include <stdio.h>int check (char s1[],char s2[])
{
int i,l;
for(i=0;i<=19;i++)
if(s1!=s2)
break;
if(s1>s2)
l=1;
else if(s1==s2)
l=0;
else
l=-1;
printf("\n");
return l;
}
int main()
{
char str1;
char str2;
gets(str1);
gets(str2);
printf("%d",check(str1,str2));
}
为何我输入相同字符串,结果显示为1,为什么不是0?而且似乎得不到为0的结果。
你写的程序并没有判断到\0结束,所以字符串结束后还会继续往后判断,
数组未初始化,在两个数组中,你输入的字符串后边是啥你不知道。
解决方法:
char str1={0};
char str2=={0};
给数组初始化,确保在你输入的字符串后边都是相同的。
但即使这样你的程序如果输入超过20个字符的字符串还是会出错
本帖最后由 jhq999 于 2023-2-11 08:22 编辑
for(i=0;i<=19;i++)
if(s1!=s2)//本来就是不等于退出,除非字符串长度大于19 ,还有你这个bug太多,了解下字符串结束标志
break; 本帖最后由 傻眼貓咪 于 2023-2-11 17:45 编辑
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int check(char s1[], char s2[])
{
// int i, l; <------- 不需要这行
for (int i = 0; i <= 19 && s1 && s2; i++) { // <------- 这里稍微作修改
if (s1 != s2)
return s1 - s2; // <------- 这里稍微作修改
if (!s2 && s1) return -1;
else if (!s1 && s2) return 1;
/* ----------------------------------------------------------
if (s1 > s2) <------ 上面已经修改,这里不需要这行
l = 1;
else if (s1 == s2) <------ 直接在最下面返回就可以了
l = 0;
else
l = -1; <------ 上面已经修改,这里不需要这行
---------------------------------------------------------- */
}
// printf("\n"); <------- 不需要这行
return 0; // <------- 这里稍微作修改
}
int main()
{
char str1;
char str2;
gets(str1);
gets(str2);
printf("%d", check(str1, str2));
} 本帖最后由 ExiaGN001 于 2023-2-13 17:58 编辑
这是简化版strcmp?
建议先BDFS一下野指针相关知识,以明确在程序中野指针/未初始化数据的危险性。
这么改:
#include <stdio.h>
int strlen(char s)//功能同string.h里的同名函数
{
int cnt=0;
while(s!='\0')cnt++;
return cnt;
}
int min(int a,int b)//功能同math.h里同名函数
{
return a<b?a:b;
}
int check (char s1[],char s2[])
{
int i,l;
for(i=0;i<min(strlen(s1),strlen(s2));i++)
if(s1!=s2)
break;
if(s1>s2)
l=1;
else if(s1==s2)
l=0;
else
l=-1;
//printf("\n");
return l;
}
int main()
{
char str1;
char str2;
gets(str1);
gets(str2);
printf("%d",check(str1,str2));
}
页:
[1]