【问题标题】:AND operator not working as expected in CAND 运算符在 C 中未按预期工作
【发布时间】:2020-11-29 19:38:54
【问题描述】:

您好,我有一个简单的身份验证客户端来获取用户名和密码,显示继续或拒绝,服务器用户名和密码设置为管理员并通过。但是,当我运行它时,只要管理员或用户名之一与服务器的用户名密码匹配,它就会显示继续。不知道出了什么问题,我使用 strcmp 比较 if 语句中的字符串的方式是否错误?

这是我的代码 authServer.c

char recvbuffer[BUFSIZE], sendbuffer[BUFSIZE], username[20], password[20], 
    usernameServer[20] = {"admin"}, passwordServer[20] = {"pass"};

sscanf(recvbuffer, "%s %s", username, password);
    
    if((strcmp(usernameServer, username) && strcmp(passwordServer, password)) == 0)
    {
        snprintf(sendbuffer, sizeof(sendbuffer), "%s", PROCEED);    
    }
    else
    {
        snprintf(sendbuffer, sizeof(sendbuffer), "%s", DENIED);
    }

    ssize_t numBytesSent = send(clntSock, sendbuffer, strlen(sendbuffer), 0);

authClient,它如何存储在sendbuffer中并通过send(sock,.....)发送到authServer.c

        printf("\nEnter username (10 characters max):\n");
        fgets(username, sizeof(username), stdin);
        strcat(sendbuffer, username);
        strcat(sendbuffer, " ");

        printf("\nEnter password (10 characters max):\n");
        fgets(password, sizeof(password), stdin);
        strcat(sendbuffer, password);
        strcat(sendbuffer, "\r\n\r\n");

【问题讨论】:

    标签: c operator-keyword strcmp


    【解决方案1】:

    我假设你想要的逻辑更像这样:

    if((strcmp(usernameServer, username) == 0) && (strcmp(passwordServer, password) == 0))
    

    因此测试用户和密码是否都等于您比较它们的值。

    【讨论】:

      【解决方案2】:

      比较字符串与strcmp():

      此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或到达终止空字符。

      返回:

      • 0 两个字符串的内容相等
      • >0 第一个不匹配的字符在ptr1中的值大于在ptr2中的值

      因此,为了查看字符串是否匹配,您将检查返回值是否为 0:
      if(strcmp(usernameServer, username) == 0 && strcmp(passwordServer, password) == 0)
      

      cpp reference - strcmp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        • 2019-06-20
        • 2021-04-13
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2020-12-29
        相关资源
        最近更新 更多