簡體   English   中英

strcmp 不適用於相同長度的相同字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM