这是一个简单的套接字。无论 if
语句在哪个文件中声明,
int main()
{
int sock, bytes_recieved;//, number;
char send_data[1024],recv_data[1024];
host = gethostbyname("127.0.0.1");
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(1237);
while(1)
{
bytes_recieved = recv(sock,recv_data,1024,0);
recv_data[bytes_recieved] = '\0';
if (recv_data[0] == "q" || recv_data[0] == "Q")
{
printf("Why do you want to close socket dude?\n");
close(sock);
break;
}
}
close(sock);
return 0;
}
在客户端和服务器中运行后,终端出现以下错误
client.c:49:26:警告:指针和整数之间的比较
if (recv_data[0] == "q"|| recv_data[0] == "Q")
^
最佳答案
首先,您应该检查该行之前的bytes_received
不是负数
recv_data[bytes_recieved] = '\0';
因为这不仅表明存在错误,而且还阻止您写入负索引,这是未定义的行为。
其次,recv_data[0]
的类型是 char
,而 "q"
是字符串文字且类型为 char *
所以
if (recv_data[0] == "q" || recv_data[0] == "Q")
不是有效的比较(如编译器所示)。
将上面的行替换为
if (recv_data[0] == 'q' || recv_data[0] == 'Q')
检查接收缓冲区中元素 0 处的特定字符 q
和 Q
。
关于C 套接字 : Comparison between pointer and integer terminal error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33641718/