为什么字符串4567和456比较后输出的值为55

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

#include<stdio.h>
#include<string.h>
int main()
{
char str1[10],str2[10];
int i=0,resu;
gets(str1);
gets(str2);

while( (str1[i]==str2[i]) && (str1[i] !='\0') )
    i++;
if(str1[i]=='\0' && str2[i] == '\0')
    resu = 0;
else
    resu = str1[i]-str2[i];
printf("result:%d\n",resu);
return 0;

}

运行结果及报错内容

resu:55

我的解答思路和尝试过的方法
我想要达到的结果

while条件中,需要把str1[i]!='\0' 和 str2[i]!='\0'放在前面
resu = str1[i] - str2[i];这里输出的是两个字符串最后一个字符的比较结果,也就是字符'7'减去'\0',字符'7'的ASCII码 是55,'\0'的ASCII码是0,所以结果就是55。如果只是想输出1或者-1,可以改成下面的:

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[10], str2[10];
    int i = 0, resu;
    gets(str1);
    gets(str2);

    while ((str1[i] != '\0') && (str2[i] != '\0') && (str1[i] == str2[i])  )
        i++;
    if (str1[i] == '\0' && str2[i] == '\0')
        resu = 0;
    else if (str1[1] != '\0')
        resu = 1;
    else
        resu = -1;
    printf("result:%d\n", resu);
    return 0;
}

就是55没错,你是把字符按整数输出,输出的值就是字符对应的ASCII码。字符'7'对应的ASCII就是55。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632