2013-10-07 116 views
0

您好,我的代碼在這裏有一個小問題。我有一個默認的UDP服務器程序,它將字符數組初始化爲大小30.爲UDP打印的奇怪字符

使用字符數組將消息從UDP客戶端程序傳遞到UDP服務器程序。當我嘗試將它轉換爲一個字符串時,它會繼續打印出這些奇怪的字符。任何建議如何擺脫他們?

#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <winsock2.h> 
    #include <iostream> 
    #include <sstream> 
    #include <string> 
    #include <stack> 
    #include <vector> 

    using namespace std; 
    //function declarations 
    void Convert(const string & Infix, string & Postfix); 
    bool IsOperand(char ch); 
    bool TakesPrecedence(char OperatorA, char OperatorB); 

    /*My functions I've added*/ 
    string Change_me(string); 
    string Insert_comma(string); 
    bool Check_valid(string); 
    double Eval(string[]); 
    void Next(string); 


    #define BUFSIZE 30 
    void ErrorHandling(char *message); 

    int main(int argc, char **argv) 
    { 
WSADATA wsaData; 
SOCKET hServSock; 
char message[BUFSIZE]; 

int strLen; 

SOCKADDR_IN servAddr; 
SOCKADDR_IN clntAddr; 
int clntAddrSize; 

if(argc!=2){ 
    printf("Usage : %s <port>\n", argv[0]); 
    exit(1); 
} 

if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) 
    ErrorHandling("WSAStartup() error!"); 

hServSock=socket(PF_INET, SOCK_DGRAM, 0); 
if(hServSock == INVALID_SOCKET) 
    ErrorHandling("socket() error!"); 

memset(&servAddr, 0, sizeof(servAddr)); 
servAddr.sin_family=AF_INET; 
servAddr.sin_addr.s_addr=htonl(INADDR_ANY); 
servAddr.sin_port=htons(atoi(argv[1])); 
if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr))==SOCKET_ERROR) 
    ErrorHandling("bind() error"); 

while(1) { 
    string Postfix; 
    clntAddrSize=sizeof(clntAddr); 
    strLen = recvfrom(hServSock, message, BUFSIZE, 0, (SOCKADDR*)&clntAddr,  &clntAddrSize); 
    //need help here how to convert char to the string 
    string Infix;// test ="(99*100+200)-10"; 

    char*result; 
    result=message; 
    Infix=result; 

    printf("Test2 %s\n",message);// gibberish printed 
+0

消息是否以'\ 0'結尾? –

+0

您是否檢查過'recvfrom'的結果以確保它確實成功? –

+0

另外,您確定該消息實際上是可以用printf()語句打印的plaintex嗎?即使它是無意義的,你所得到的一個小例子也許會有所幫助。 –

回答

1

如果消息不是空終止的,%s不能格式化它。嘗試

printf("Test2 %.*s", strlen, message); 

提供'strlen'當然是非負的。你也沒有檢查。