我一直在使用C语言进行套接字网络编程,为的是验证客户端提供的密码。我已经设置好了所有内容,套接字也能够通信,但当我发送一个字符串并使用strcmp()比较这些字符串时,尽管打印出来的字符串相同,但它们不会返回0(我相信这表示这些字符串是相同的),如下所示:
请注意,客户端和服务器端是独立的程序,在我的机器上通过本地主机进行通信。
/*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的使用,但我不确定它们是如何相关的。
read
的返回值,所以你不知道读取了多少字节。你指望strcmp
怎么知道呢? - David Schwartzread
可能读取少于 64 字节。它会返回读取的字节数。如果不足 64 字节,则需要使用剩余部分重复。 - fukanchikread
之后检查password_buffer
的内存。我也会将其初始化为全0,并且只读取63个字节以确保最后一个是\0
。 - yano