gpt4 book ai didi

c - 为什么打印输入缓冲区会导致意外输出?

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:21 27 4
gpt4 key购买 nike

在下面的代码中,每当在数组“pass”和“repass”中输入相同的字符串时,“repass”中的字符串就会加倍。例如,如果“pass”和“repass”中的输入字符串是 aaaaaaaa,那么“repass”中的字符串将变为 aaaaaaaaaaaaaaaa,因为 strcmp() 会给出否定答案。

有人可以帮忙解释一下这背后的原因吗?

#include<stdio.h>
#include<conio.h>
#include<string.h>

void main()
{
char user_name[20],pass[8],repass[8];
int i=0,c=0,tr=1;//tr for no of try(should less than 3 )
clrscr();
puts("enter user name");
gets(user_name);
printf("\n\n\n\n");

for(tr=1;tr<=3;tr++)
{
puts("\n\nenter password");

while(i<8)
{
pass[i] = getch();
putchar('*');
i++;
}

printf("\n\n\n\nplease reenter the password\n\n");
i=0;

while(i<8)
{
repass[i]=getch();
putchar('*');
i++;
}

c=strcmp(pass, repass);
printf("c=%d", c);

if(strcmp(pass,repass)==0)
c=0;
else
c++;

if(c==0)
{
printf("\n\n\t****\vsuccessful login*********** ");
break;
}
else
printf("\n\nsorry password did not match");
}

if(tr>3)
puts("\n\nlogin failed");
//printf("%s %s",pass,repass);
getch();
}

最佳答案

您不是以 0 终止字符串,因此对它们使用“字符串”函数(使用“%s”、strcmp 等打印)是非法的。

在这种特殊情况下,由于堆栈布局,repass 看起来是“加倍”,passrepass 是下一个给另一个。


侧节点,使用fgets instead of gets .

关于c - 为什么打印输入缓冲区会导致意外输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10285307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com