C 套接字 : Comparison between pointer and integer terminal error

标签 c sockets if-statement terminal

这是一个简单的套接字。无论 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 处的特定字符 qQ

关于C 套接字 : Comparison between pointer and integer terminal error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33641718/

相关文章:

C++ Winsock send,recv - 它们是如何工作的

java - 我是编程新手,我无法理解这段代码

c - C 中的全局变量及其在文件之间的作用域

sockets - 我可以使用 Lua "socket"库找出端口的状态吗?

c - 指向 const 静态数组的指针

c# - 如何强制二进制应用程序使用 C# 工具中的 SOCKS 代理?

javascript - 如果/否则语句

android - if 和 else 命令在 android 首选项中

c - 使用 sizeof 运算符在 C 中绑定(bind) while 和 for 循环的正确方法是什么?这是最佳方法吗?

c - fork() 搜索 3D 数组 C 编程