次のコードでは、配列 "pass"と "repass"に同じ文字列を入力すると、 "repass"の文字列が2倍になります。たとえば、 "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'を使わないように教えてください。 –