C语言基础问题 求解答

在比较函数中,for循环不执行,在输出结果中只输出s1<s2
个人找问题,觉得是for循环的判断条件i<s1.len&&i<s2.len出错,但我觉得没有问题。
但怕的就是自己觉得自己是对的,求解答。

#include<stdio.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
#define MAXLEN 9

typedef struct{
    char ch[MAXLEN];
    int len;
}SString; 
//求长度 
int Howlong(SString s){
    int i;
    for(i=0;s.ch[i]!='\0';i++);
    return i;
}
//创建s2
int Creat(SString *s){
    int i;
    char c;
    printf("创建s2,请输入字符串:(以'$'结束):");
    scanf("%c",&c);
    i=0;
    while(c!='$'){
        scanf("%c",&c);
        s->ch[i]=c;
        i++;
    }
    s->ch[i]='\0';
    s->len=Howlong(*s);
    //printf("%d",s->len);
    return TRUE;
} 
//比较
void Compare(SString s1,SString s2){
    int i;
    for(i=0;i<s1.len&&i<s2.len;i++)
        if(s1.ch[i]!=s2.ch[i]){
            if(s1.ch[i]-s2.ch[i]>0){
            printf("s1>s2\n");
            return;
            }
            else if(s1.ch[i]-s2.ch[i]<0){
            printf("s1<s2\n");
            return;
            }
        }
    if(s1.len-s2.len>0)printf("s1>s2");
    else if(s1.len-s2.len<0)printf("s1<s2");
    else printf("s1==s2");
    return;
} 
//展示函数,测试使用
void Show(SString s){
    int i;
    for(i=0;s.ch[i]!='\0';i++){
        putchar(s.ch[i]);
    }
    printf("\n");
}
int main(){
    SString s1={"abcdefg"},s2;
    printf("s1=%s的字符串长度为%d\n",s1.ch,Howlong(s1));
    Creat(&s2);
    Compare(s1,s2);
    Show(s1);
}

  1. 可以通过调试设置断点,来判断for(i=0;i<s1.len&&i<s2.len;i++)处有没有按照你设想的来运行;
  2. 调试发现,s2通过Creat函数s2.len有赋值,s1.len则为0
  3. 正确代码如下
int main(){
    SString s1={"abcdefg"},s2;
    printf("s1=%s的字符串长度为%d\n",s1.ch,Howlong(s1));
    s1.len = Howlong(s1);
    Creat(&s2);
    Compare(s1,s2);
    Show(s1);
}

学会调试