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,您会发现它工作正常。

您的程序在刷新标准输出缓冲区之前刚刚退出。