我一直在用C进行套接字联网,用于一个将从客户端获取密码以在服务器上进行验证的应用程序。我已经设置好了所有内容,套接字也进行了通信,但当我发送一个字符串并使用strcmp()时,尽管打印出来时字符串是相同的,但不会返回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 Incorrectn");
{
else
{
printf("Password correctn");
}
如有任何帮助,我们将不胜感激。我突然想到可能涉及bzero或memset的使用,尽管我不确定这些是如何涉及的。
fgets(password, 64, stdin);
可能会在字符串末尾添加一个尾随的换行符(n
)。从fgets
之后的客户端字符串中删除它,或者在服务器端的比较字符串末尾添加一个
要从客户端字符串中删除尾随的新行,请使用例如:password[strcspn(password, "rn")] = 0;