[英]Strcmp doesn't work on same strings with same length
所以,我有這個代碼,其中密碼是一個字符串,它是通過將一個更大的字符串分解為令牌而獲得的,並從文本文件中獲得。 我什至使用了 strcspn 所以我可以從 pass 中刪除 '\\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。我真的很困惑。
如果您在最后一個printf
添加一個\\n
,您會看到它工作正常。
您的程序只是在刷新標准輸出緩沖區之前退出。
你怎么知道它沒有正確比較? 如果是打印語句,您似乎忘記了換行符,這意味着它可能不會在沒有其他打印的情況下刷新到屏幕上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.