2013-10-07 6 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

Кроме того, вы уверены, что сообщение на самом деле является plaintex, которое может быть напечатано с помощью инструкции printf()? Даже если это не имеет смысла, небольшой пример того, что вы получаете, может помочь. –

ответ

1

Если сообщение не завершено нулем,% s не может его отформатировать. Попробуйте

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

При условии, что 'strlen' является неотрицательным, конечно. Вы тоже не проверяете это.