Strcmp 不适用于相同长度的相同字符串
Strcmp doesn't work on same strings with same length
所以,我有这段代码,其中 password 是通过将令牌分成更大的字符串而获得的字符串,并通过从文本文件获得。我什至使用了 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") ] = '[=10=]';
printf("%s\n%s\n",password, pass);
printf("%i %i\n",strlen(password), strlen(pass));
if(strcmp(password, pass) == 0){
printf("Connected");
}
}
正如您从终端中看到的那样,它打印出具有相同长度的相同字符串,但 strcmp 出于某种原因并没有 return 0.I 我真的很困惑。
你怎么知道它没有正确比较?如果是打印出来的语句,你似乎忘记了换行符,这意味着它可能不会在没有另一次打印的情况下刷新到屏幕上。
如果您将 \n
添加到最后一个 printf
,您会发现它工作正常。
您的程序在刷新标准输出缓冲区之前刚刚退出。
所以,我有这段代码,其中 password 是通过将令牌分成更大的字符串而获得的字符串,并通过从文本文件获得。我什至使用了 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") ] = '[=10=]';
printf("%s\n%s\n",password, pass);
printf("%i %i\n",strlen(password), strlen(pass));
if(strcmp(password, pass) == 0){
printf("Connected");
}
}
正如您从终端中看到的那样,它打印出具有相同长度的相同字符串,但 strcmp 出于某种原因并没有 return 0.I 我真的很困惑。
你怎么知道它没有正确比较?如果是打印出来的语句,你似乎忘记了换行符,这意味着它可能不会在没有另一次打印的情况下刷新到屏幕上。
如果您将 \n
添加到最后一个 printf
,您会发现它工作正常。
您的程序在刷新标准输出缓冲区之前刚刚退出。