这个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
阅读 2.2k
1 个回答

如果你是要把输入的字符串的内容放到数组ab里,第七行应该改成:

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的内容。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进