다음 코드에서 동일한 문자열이 "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();
}
코드를 들여 씁니다. SO에 대한 권장 사항은 레벨 당 4 칸이며 탭이 없습니다. –
또한, 그들은'gets'를 사용하지 말라고 가르치지 않습니까 ??? –