c - 这个suma会溢出是吗?
本文介绍了c - 这个suma会溢出是吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[6],b[6];
scanf("%s%s",&a,&b);
int i;
long long suma=1,sumb=1;
for(i=0;i<6;i++)
{
if(a[i]==0) break;
a[i]-='A'-1;
suma*=a[i];
}
for(i=0;i<6;i++)
{
if(b[i]==0) break;
b[i]-='A'-1;
sumb*=b[i];
}
printf("%lld %lld",suma,sumb);
if(suma%47==sumb%47)
puts("GO");
else puts("STAY");
return 0;
} 数据一大suma就输出1是为什么啊
样例 输入EWFEWG WEFEWR 输出sumb正常 suma显示1
解决方案
如果你是要把输入的字符串的内容放到数组a
和b
里,第七行应该改成:
scanf("%s%s", a, b);
另外,由于 C 语言内存排布的原因,很有可能非常凑巧的数组b
占据了数组a
之前的6个字节,这可以通过如下代码:
printf("%ld\n", b - a); // 输出:-6
这使得如果你的b
录入了恰好6个字节的时候,b
末尾插入的\0
被插入到了a[0]
,所以导致了之后的结果,而这也可以通过:
printf("%s\n", &a[1]); // 输出:WFEWG
来验证。如果你的b
变得更长,结果就是从第六个字节开始的那个子串覆盖a
的内容。
这篇关于c - 这个suma会溢出是吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文