0

您好,我的代码有一个小问题。我有一个默认的 UDP 服务器程序,它将一个字符数组初始化为 30 的大小。

消息使用字符数组从 UDP 客户端程序传递到 UDP 服务器程序。当我尝试将其转换为 string 时,它会不断打印出这些奇怪的字符。任何建议如何摆脱它们?

  #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
4

1 回答 1

1

如果消息不是以 null 结尾的,则 %s 无法对其进行格式化。尝试

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

前提是“strlen”当然是非负的。你也没有检查。

于 2013-10-07T23:21:17.413 回答