2015-11-10 71 views
0

這是一個簡單的套接字。無論是在客戶端和服務器運行後,在哪個文件if聲明宣佈不管,C插座:指針和整數終端錯誤之間的比較

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: warning: comparison between pointer and integer if (recv_data[0] == "q" || recv_data[0] == "Q") ^

+2

當你把'「q」'它認爲q是一個字符串,因爲它在雙引號中嘗試'if(recv_data [0] =='q'|| recv_data [0] =='Q')' – JackVanier

+0

recv_data [0]是一個char,「q」是一個char [2]。你想要做什麼? – immibis

+0

非常感謝JackWilliams。我開始使用套接字,這是我第一次使用它。當一個人從JavaScript傳遞到C時,這真是太瘋狂了:) – developer

回答

2

首先,你應該檢查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') 

以檢查特定字符q並在接收緩衝器Q在元件爲零。

+0

另外請注意'recv_data [bytes_recieved] ='\ 0';'如果接收到全部1024個字節,將寫入越界。 –

-1

不能角色比作串。

相關問題