Strcmp不适用于相同长度的相同字符串

时间:2019-12-04 23:42:50

标签: c fgets strcmp

所以,我有这段代码,其中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。我真的很困惑。

enter image description here

2 个答案:

答案 0 :(得分:3)

如果将\n添加到最后一个printf,则会发现它工作正常。

您的程序在刷新stdout缓冲区之前就退出了。

答案 1 :(得分:2)

您怎么知道它比较不正确?如果是通过打印的语句,则您似乎已经忘记了换行符,这意味着如果没有其他打印,它可能不会刷新到屏幕上。