考虑这段代码
char *pass="test";
int keyPressed;
char *password=(char *)malloc(PASS_LENGTH*sizeof(char));
int index=0;
printf("Enter the password please\n");
do
{
keyPressed=getch();
password[index++]=keyPressed;
}
while(keyPressed!=13);
int result=strcmp(pass,password);
我想你明白我想做什么:) 我读了*密码“test”,但结果不是0,一些解释会很好:)
答案 0 :(得分:6)
因为我认为这是作业...尝试在按下Enter后写出字符串,看看是否能看到差异。
答案 1 :(得分:5)
您必须删除最后一个字符并“关闭”字符串:put
password[index - 1] = '\0'
答案 2 :(得分:1)
akappa的建议将解决你所看到的strcmp问题。
另请注意,您正在使用有限数量的内存,但在编写此内存时,不会检查已分配块的大小。 写入的代码将允许写入“密码”的结尾。
答案 3 :(得分:0)
看起来它会是“test \ n”,因为你已经添加了keyPressed。从而也溢出了密码变量。
答案 4 :(得分:0)
你应该在最后一行代码之前使用malloc PASS_LENGTH + 1并设置密码[index] = 0。 因为strcmp和其他C str例程使用ASCIIZ字符串
答案 5 :(得分:0)
回车包含在password
的末尾。