所以,我有这段代码,其中password是一个字符串,它是通过将更大的字符串分成令牌并从文本文件中获得而获得的。我什至使用了strcspn,因此可以从通行证中删除“ \ n”。
if (ok == 1){
char buffer[20];
snprintf(buffer, sizeof(buffer), "%s.txt", username);
chdir("./passwords") ;
FILE *userf;
userf = fopen(buffer,"r");
if(userf == NULL){
perror("Eroare la fopen");
exit(1);
} else
printf("Am deschis fisierul cu parola\n");
char pass[20];
if(fgets(pass, sizeof(pass), userf) == NULL){
perror("Eroare la fgets");
exit(1);
}
pass [ strcspn(pass, "\r\n") ] = '\0';
printf("%s\n%s\n",password, pass);
printf("%i %i\n",strlen(password), strlen(pass));
if(strcmp(password, pass) == 0){
printf("Connected");
}
}
从终端可以看到,它以相同的长度打印出相同的字符串,但是由于某种原因strcmp不会返回0。我真的很困惑。
答案 0 :(得分:3)
如果将\n
添加到最后一个printf
,则会发现它工作正常。
您的程序在刷新stdout缓冲区之前就退出了。
答案 1 :(得分:2)
您怎么知道它比较不正确?如果是通过打印的语句,则您似乎已经忘记了换行符,这意味着如果没有其他打印,它可能不会刷新到屏幕上。