C - 套接字网络 - 字符串不会产生相等性
C - Socket Networking - string's won't produce equality
我一直在用 C 语言做套接字网络,用于从客户端获取密码以在服务器端进行验证的应用程序。我已经设置好所有内容并且套接字可以通信但是当我发送一个字符串并使用 strcmp() 时,尽管打印出来时字符串相同,但不会 return 0 (我相信这表明字符串是相同)像这样:
注意客户端和服务器端是不同的程序,在我的机器上通过 localhost。
/*Client Side */
char password[64] = {0};
fgets(password, 64, stdin);
write(sockfd, password, 64);
/*Server Side */
char password[64] = "password";
char password_buffer[64];
read(newsockfd, password_buffer, 64);
if(strcmp(password, password_buffer) != 0)
{
printf("Password Incorrect\n");
{
else
{
printf("Password correct\n");
}
如有任何帮助,我们将不胜感激。我想到可能涉及 bzero 或 memset 的使用,尽管我不确定这些是如何牵连的。
fgets(password, 64, stdin);
可能会在字符串末尾添加尾随换行符 (\n
)。从客户端字符串fgets
后删除,或者在服务器端比较字符串的末尾添加一个。
要从客户端字符串中删除尾随的换行符,请使用例如这个:
password[strcspn(password, "\r\n")] = 0;
我一直在用 C 语言做套接字网络,用于从客户端获取密码以在服务器端进行验证的应用程序。我已经设置好所有内容并且套接字可以通信但是当我发送一个字符串并使用 strcmp() 时,尽管打印出来时字符串相同,但不会 return 0 (我相信这表明字符串是相同)像这样:
注意客户端和服务器端是不同的程序,在我的机器上通过 localhost。
/*Client Side */
char password[64] = {0};
fgets(password, 64, stdin);
write(sockfd, password, 64);
/*Server Side */
char password[64] = "password";
char password_buffer[64];
read(newsockfd, password_buffer, 64);
if(strcmp(password, password_buffer) != 0)
{
printf("Password Incorrect\n");
{
else
{
printf("Password correct\n");
}
如有任何帮助,我们将不胜感激。我想到可能涉及 bzero 或 memset 的使用,尽管我不确定这些是如何牵连的。
fgets(password, 64, stdin);
可能会在字符串末尾添加尾随换行符 (\n
)。从客户端字符串fgets
后删除,或者在服务器端比较字符串的末尾添加一个。
要从客户端字符串中删除尾随的换行符,请使用例如这个:
password[strcspn(password, "\r\n")] = 0;